'DB/MSSQL'에 해당되는 글 12건

CREATE TABLE dbo.tbllb_DBoard (
    idx          INT NOT NULL, 
    lb_name      VARCHAR(10) NOT NULL, 
    lb_SCate     TINYINT NOT NULL CONSTRAINT DF_tbllb_DBoard_lb_SCate DEFAULT (0), 
    lb_news      BIT NOT NULL, 
    m_id         VARCHAR(20), 
    Umame        VARCHAR(20) NOT NULL, 
    eMail        VARCHAR(50), 
    Title        VARCHAR(100) NOT NULL, 
    TagFlag      BIT NOT NULL, 
    Content      TEXT NOT NULL, 
    pwd          VARCHAR(10), 
    readNum      INT NOT NULL CONSTRAINT DF_tbllb_DBoard_readNum DEFAULT (0), 
    rRef         SMALLINT, 
    rLevel       SMALLINT, 
    rStep        SMALLINT, 
    file1        VARCHAR(50), 
    file1_size   INT, 
    file1_width  INT, 
    file2        VARCHAR(50), 
    file3        VARCHAR(50), 
    writeday     DATETIME NOT NULL CONSTRAINT DF_tbllb_DBoard_writeday DEFAULT (getdate()), 
 CONSTRAINT idx_board 
   PRIMARY KEY NONCLUSTERED (idx ASC, lb_news DESC, rRef DESC, rStep ASC) ON [PRIMARY]
) ON [PRIMARY]

ALTER TABLE dbo.tbllb_DBoard 
    WITH CHECK ADD CONSTRAINT FK_tbllb_DBoard_tbllb_config
      FOREIGN KEY ( lb_name )
        REFERENCES dbo.tbllb_config ( lb_name )
;






CREATE PROCEDURE [Proc_lb_DList] 
	@lb_name		VarChar(10),
	@rlb_SCate		VarChar(50),
	@SearchF		VarChar(30),
	@SearchS		VarChar(50),
	@npage		INT,
	@lb_CateName		VarChar(50) 	OUTPUT,
	@lb_Nickname		VarChar(50) 	OUTPUT,
	@lb_open		Char(1)	 	OUTPUT,
	@lb_design		Char(28) 	OUTPUT,
	@lb_record		INT		OUTPUT,
	@lb_width		VARCHAR(5)	OUTPUT,
	@szRecordCount	INT		OUTPUT,
	@szPageCount		INT		OUTPUT,
	@MsgFlag		SMALLINT	OUTPUT,
	@Msg			VARCHAR(50)	OUTPUT
AS
	DECLARE 	@sql 		varchar(8000)
	DECLARE 	@sql2 		varchar(1000)
	DECLARE 	@sql3 		nvarchar(4000)  ---NvarChar형식이여야 함.
	DECLARE 	@p 		nvarchar(100)
	DECLARE 	@sum_cnt 	INT -- output 파라메터를 위한 선언
	SET @sql=''
	SET @sql2=''
	SET @SearchS=rTrim(ltrim(@SearchS))
		IF @rlb_SCate<>99 BEGIN
			Set @sql2=@sql2 + ' and ((lb_news=0 and lb_SCate=' + Convert(Varchar(5),@rlb_SCate) + ') or lb_news=1)'
		END
	IF @SearchS<>'' BEGIN
		IF @SearchF='Title' BEGIN
			SET @sql2=@sql2 + ' and ((Title like ' +Char(39) + '%' + @SearchS + '%' + Char(39) + ') or (Umame like ' +Char(39) + '%' + @SearchS + '%' + Char(39) + '))'
		END
		ELSE	BEGIN
			SET @sql2=@sql2 + ' and Content like ' +Char(39) + '%' + @SearchS + '%' + Char(39) 	
		END
	END
	IF EXISTS(select lb_name from tbllb_config where lb_name=@lb_name)
	BEGIN
		Set @lb_CateName=(select lb_CateName from tbllb_Cate where lb_Cate=(select lb_Cate from tbllb_config where lb_name=@lb_name))
		Set @lb_Nickname=(select lb_Nickname from tbllb_config where lb_name=@lb_name)
		Set @lb_open=(select lb_open from tbllb_config where lb_name=@lb_name)
		Set @lb_design=(select lb_design from tbllb_config where lb_name=@lb_name)
		Set @lb_record=(select lb_record from tbllb_config where lb_name=@lb_name)
		Set @lb_width=(select lb_width from tbllb_config where lb_name=@lb_name)
		
		SET @sql = 'select top ' + convert(varchar(10),@lb_record) + ' idx, lb_news, m_id, Umame, eMail, lb_SCate, 
		(case lb_news when 1 then ' + Char(39) +Char(39) + ' else (case lb_SCate when 0 then (case when (select count(lb_SCate) from tbllb_SCate where lb_Name=tbllb_Dboard.lb_Name)>0 then ' + Char(39) + '[기타]' +Char(39) +' else  ' + Char(39) +Char(39) +' end) else (select '  + Char(39) +  '['  + Char(39) +  '+lb_SCateName+' + Char(39) + ']'  + Char(39) +  ' from tbllb_SCate where lb_Name=tbllb_Dboard.lb_Name and lb_SCate=tbllb_Dboard.lb_SCate) end) end ) as lb_SCateName,
		 Title,readNum, convert(varchar(10),writeday,121) as writeday, (case when convert(varchar(10),writeday,121)>=convert(varchar(10),getdate()-1,121) then 1 else 0 end) as date_flag, rLevel,(case when (file1_width>0 and file1<>' + char(39)+char(39)+ ') then 1 when file1<>' + char(39)+char(39)+ ' then 2 else 0 end) as file_flag, file1,(select count(num) from tbllb_reView where lb_name=' + char(39) + @lb_name + char(39) + ' and idx=tbllb_Dboard.idx) as reViweNO from tbllb_Dboard where lb_name=' + char(39) + @lb_name + char(39) + @sql2
		SET @sql = @sql + ' and idx Not in(select top ' +convert(varchar(10),@lb_record*(@npage-1))  + ' idx from tbllb_Dboard where lb_name=' + char(39) + @lb_name + char(39) + @sql2 + ' Order by lb_news Desc, rRef desc, rStep asc) Order by lb_news Desc, rRef desc, rStep asc'
		-- 주문 수량 카운트
		SET @sql3='select @sum_cnt_in=(count(idx)) from tbllb_DBoard where lb_name=' +char(39) + @lb_name + char(39) + @sql2
		set @p = '@sum_cnt_in INT OUTPUT'
		EXEC sp_executesql @sql3, @p, @sum_cnt_in=@sum_cnt OUTPUT
		SET @szRecordCount=@sum_cnt
		SET @szPageCount=(CONVERT(INT,((@szRecordCount - 1)/@lb_record) + 1))
	
		--select @sql
		exec(@sql)
		SET @MsgFlag=1 -- 1  성공
	END
	ELSE	BEGIN
			SET @MsgFlag=0 -- 1저장 실패
			SET @Msg='잘못 된 접근입니다.' 
	END

















CREATE PROCEDURE [Proc_lb_BregProc] 
	@lb_name		VarChar(10),
	@lb_SCate		tinyInt,
	@idx			INT,
	@rRef			SmallINT,
	@rLevel		SmallINT,
	@rStep			SmallINT,
	@flag			Char(1),
	
	@Umame		VarChar(10),
	@M_id			VarChar(20),
	@Title			VarChar(100),
	@eMail			VarChar(50),
	@Content		TEXT,
	@TegFlag		BIT,
	@lb_news		BIT,
	@Pwd			VarChar(10),
	@MsgFlag		SmallINT	OUTPUT,
	@Msg			VarChar(50)	OUTPUT,
	@NextIdx		INT		OUTPUT
AS
	set nocount on
	DECLARE  @regFlag  	CHAR(1)
	
	IF EXISTS(select lb_name from tbllb_config where lb_name=@lb_name)
	BEGIN
		SET @regFlag=(select lb_open from tbllb_config where lb_name=@lb_name)
		SET @NextIdx=(select isnull(MAX(idx),0)+1 from tbllb_Bboard)
	
		Set @M_id=rtrim(@M_id)
		Set @Pwd=rtrim(@Pwd)
	
		IF @flag='R' and @idx>0 BEGIN
			SET @lb_SCate=(select top 1 lb_SCate from dbo.tbllb_Bboard where rRef=@rRef Order by rLevel Asc)
			UPdate tbllb_Bboard Set rStep=rStep+1 Where lb_name=@lb_name and rRef=@rRef and rStep>@rStep
			SET @rStep=@rStep+1
			SET @rLevel=@rLevel+1
		END 
		ELSE BEGIN
			SET @rRef=@NextIdx
			SET @rStep=0
			SET @rLevel=0
		END
	
		IF @regFlag='W' or LEN(@M_id)>0 BEGIN
			INSERT INTO tbllb_Bboard
			(idx,lb_name,lb_SCate,lb_news, m_id,Umame,eMail,Title, TagFlag, Content, pwd, rRef, rLevel, rStep) 
			values 
			(@NextIdx,@lb_name,@lb_SCate,@lb_news, @M_id,@Umame,@eMail,@Title, @TegFlag, @Content, @Pwd, @rRef, @rLevel, @rStep)
	
			SET @MsgFlag=1 -- 1저장 성공
		END
		ELSE	BEGIN
			SET @MsgFlag=0 -- 1저장 성공
			SET @Msg='게시판 쓰기 권한이 존재하지 않습니다.' -- 1저장 성공
		END
	END
	ELSE	BEGIN
			SET @MsgFlag=0 -- 1저장 성공
			SET @Msg='잘못 된 접근입니다.' -- 1저장 성공
	END
	set nocount off

'DB > MSSQL' 카테고리의 다른 글

[MSSQL] 프로시져3  (0) 2022.04.26
[MSSQL] 프로시져2  (0) 2022.04.26
[MSSQL]컬럼 목록 및 테이블 리스트  (0) 2022.04.21
[MSSQL]프로시져1  (0) 2022.04.21
[MSSQL] 날짜 형식 맞추기  (0) 2022.04.21
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[MSSQL] 프로시져3

DB/MSSQL 2022. 4. 26. 10:31
ALTER PROCEDURE [dbo].[proc_Account] 
	@yymm  CHAR(6),
	@flag  VARCHAR(10)
AS
	DECLARE @sql varchar(5000)
	DECLARE @opt_price INT
	--SET @opt_price=(select isnull(sum(add_inDanga+((su-1)*add_optDanga*add_inDanga)),0) from Order_detail OD, order_options OO where OD.seq=OO.seq and OD.num=OO.num and OD.buy_code=@yymm  + '-' + char(39) + ')
	SET @sql='select Account_code, Account_no, '
IF @flag='buy' BEGIN
	SET @sql=@sql +'(select buyCo_nameC from tbl_buyCo where buyCo_id=tbl_Account.Account_co) as make_co_name, 0 as co_tax, '
END
ELSE	BEGIN
	SET @sql=@sql +'case when Account_co=0 then ' + char(39) + '이미지사이트' + char(39) +  ' when Account_co<>0 then (select custom_name from dbo.other_order where custom_code=tbl_Account.Account_co) end as make_co_name, '
	SET @sql=@sql +'isnull((select co_tax from other_order where custom_code=tbl_Account.Account_co),0) as co_tax, '
END
	SET @sql=@sql + 'Account_st, Account_en, '
IF @flag='buy' BEGIN
	SET @sql=@sql + ' (isnull((select sum(case order_detail.ea_box when 0 then order_detail.in_danga*order_detail.su when 1 then order_detail.in_danga*order_detail.su*order_detail.box_su end) from order_detail,[order] where buy_code=' + char(39) +@yymm  + '-' + char(39) + '+Convert(varchar(10), Account_no) and order_detail.seq=[order].seq and ( (left([order_detail].seq,1)<>' + Char(39) + 'C' + char(39) + ' and  [order_detail].detail_flag in(70,80)) or  (left([order_detail].seq,1)=' + Char(39) + 'C' + char(39) + ' and  [order_detail].detail_flag>30) ) ),0))+(select isnull(sum(add_inDanga+((su-1)*add_optDanga*add_inDanga)),0) from Order_detail OD, order_options OO where OD.seq=OO.seq and OD.num=OO.num and OD.buy_code=' + char(39) +@yymm  + '-' + char(39) + '+Convert(varchar(10), Account_no) ) as Account_price '
END
ELSE	BEGIN
	SET @sql=@sql + '((select sum(case when [order].custom_code=0 then total_pay when [order].custom_code<>0 then custom_danga*su end) from order_detail,[order] where order_detail.seq=[order].seq and sell_code=' + char(39) +@yymm  + '-' + char(39) + '+Convert(varchar(10), Account_no) and  ((left([order_detail].seq,1)<>' + Char(39) + 'C' + char(39) + ' and  [order_detail].detail_flag in(70,80)) or  (left([order_detail].seq,1)=' + Char(39) + 'C' + char(39) + ' and  [order_detail].detail_flag>30) ) )+(select isnull(sum(add_sellDanga+((su-1)*add_optDanga*add_sellDanga)),0) from Order_detail OD, order_options OO where OD.seq=OO.seq and OD.num=OO.num and OD.sell_code=' + char(39) +@yymm  + '-' + char(39) + '+Convert(varchar(10), Account_no)) ) as Account_price '
END
	SET @sql=@sql + ', Convert(varchar(10),Account_date,112) as Account_date,  Account_price as Account_price2, receive_pay, aFlag, (select Isnull(sum(Account_in-Account_out),0) from tbl_inOutPay where Account_idx=' + char(39) +@yymm + '-' + char(39) + '+Convert(varchar(10), Account_no)) as sum_pay, Account_memo, Account_tax, apply '
	SET @sql=@sql + ', (select top 1 Summary from tbl_inOutPay where Account_idx= tbl_Account.Account_code + ' + Char(39) + '-' + Char(39) + ' + Convert(varchar(3),Account_no) and Account in(1,2)) as summary'
	SET @sql=@sql + ' from tbl_Account '
	SET @sql=@sql + ' where Account_flag=' + char(39) + @flag + char(39) + ' and Account_code=' + @yymm
	SET @sql=@sql + ' order by Account_No asc'
	--select @sql
	exec(@sql)

'DB > MSSQL' 카테고리의 다른 글

[MSSQL] 계층형 게시판 DB 만들기  (1) 2022.04.26
[MSSQL] 프로시져2  (0) 2022.04.26
[MSSQL]컬럼 목록 및 테이블 리스트  (0) 2022.04.21
[MSSQL]프로시져1  (0) 2022.04.21
[MSSQL] 날짜 형식 맞추기  (0) 2022.04.21
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[MSSQL] 프로시져2

DB/MSSQL 2022. 4. 26. 10:29
ALTER PROCEDURE [dbo].[get_goods_search] 
	@sang 		varchar(20),
	@userIP 	varchar(20)
AS
	set nocount on
	declare  @sql varchar(5000)
	SET @sang=replace(@sang,' ','')
	
	insert SearchHit(searchS,userIP) values (left(@sang,25), @userIP)
	if len(@sang)>=2 BEGIN
		set @sql = 'select sang_name,brand,code,ea_danga,box_danga,box_su,simage, icon, (case when Convert(varchar(10),indate,112)>=Convert(varchar(10),getdate()-30,112) then 1 else 0 end) as New_icon from goods where hidden_flag=''0'' and  ((brand>0 and brand<1000) or brand=20) and '
		set @sql = @sql + ' (replace(sang_name,'+char(39) + ' ' + char(39) + ','+char(39)+char(39)+') like ' + char(39) + '%' + @sang + '%'  + char(39)  + ' or replace(keyword,'+char(39) + ' ' + char(39) + ','+char(39)+char(39)+') like ' + char(39) + '%' + @sang + '%'  + char(39)  + ' or goods_code like ' + char(39) + '%' + @sang + '%'  + char(39) +') or Convert(varchar(7),code)=' + char(39) + @sang + char(39) + ' Order by seq, Code Desc'
	END
	set nocount off
--select @sql
exec(@sql)

'DB > MSSQL' 카테고리의 다른 글

[MSSQL] 계층형 게시판 DB 만들기  (1) 2022.04.26
[MSSQL] 프로시져3  (0) 2022.04.26
[MSSQL]컬럼 목록 및 테이블 리스트  (0) 2022.04.21
[MSSQL]프로시져1  (0) 2022.04.21
[MSSQL] 날짜 형식 맞추기  (0) 2022.04.21
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,
--테이블 목록 가져오기:
SELECT * FROM sysobjects WHERE xtype='U' 

--뷰:
SELECT * FROM sysobjects WHERE xtype='V' 

--프로시져:
SELECT * FROM sysobjects WHERE xtype='P' 


--테이블 리스트
SELECT * FROM  INFORMATION_SCHEMA.TABLES
--뷰 리스트
SELECT * FROM  INFORMATION_SCHEMA.VIEWS
--컬럼 리스트
SELECT * FROM  INFORMATION_SCHEMA.COLUMNS
--컬럼 키값
SELECT * FROM  INFORMATION_SCHEMA.KEY_COLUMN_USAGE

--프로시져
SELECT * FROM INFORMATION_SCHEMA.ROUTINES
--프로시져 파라메타값
SELECT * FROM  INFORMATION_SCHEMA.PARAMETERS

 

--컬럼 정보 가져오기
SELECT
 A.TABLE_CATALOG
 ,A.TABLE_NAME
 ,A.ORDINAL_POSITION
 ,A.COLUMN_NAME
 ,A.DATA_TYPE
 ,ISNULL(A.CHARACTER_MAXIMUM_LENGTH,'')
 ,ISNULL(A.NUMERIC_PRECISION,'')
 ,A.IS_NULLABLE
 ,ISNULL(A.COLUMN_DEFAULT,'')
 ,ISNULL(B.CONSTRAINT_NAME,'')
 ,ISNULL(A.CHARACTER_SET_NAME,'')
 ,ISNULL(A.COLLATION_NAME,'')
 ,CASE WHEN ISNULL(C.NAME,'') = '' THEN '' ELSE 'Identity' END auto
FROM 
 INFORMATION_SCHEMA.COLUMNS A
 LEFT OUTER JOIN
 INFORMATION_SCHEMA.KEY_COLUMN_USAGE B
 ON A.TABLE_NAME = B.TABLE_NAME 
 AND A.COLUMN_NAME = B.COLUMN_NAME
 LEFT OUTER JOIN
 syscolumns C 
 ON C.ID = object_id(A.TABLE_NAME) AND A.COLUMN_NAME = C.NAME AND C.COLSTAT & 1 = 1 
WHERE
 A.TABLE_NAME = '테이블명'
ORDER BY A.ORDINAL_POSITION

'DB > MSSQL' 카테고리의 다른 글

[MSSQL] 프로시져3  (0) 2022.04.26
[MSSQL] 프로시져2  (0) 2022.04.26
[MSSQL]프로시져1  (0) 2022.04.21
[MSSQL] 날짜 형식 맞추기  (0) 2022.04.21
dblink3  (0) 2019.04.02
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[MSSQL]프로시져1

DB/MSSQL 2022. 4. 21. 17:45
ALTER PROCEDURE [dbo].[get_board] 
@code  int,
@num  int
AS
declare @p_code int
declare @p_num int
declare @n_code int
declare @n_num int
set nocount on
select top 1 @p_code=code,@p_num=num  from board where (code=@code and num>@num) or (code>@code)  order by code asc ,num desc
select top 1 @n_code=code,@n_num=num from board where (code=@code and num<@num ) or (code<@code) order by code desc, num desc
update board set  Cnt = cnt+1 WHERE code=@code and  num=@num
Select  top 1
seq,
name,
title,
cnt,
convert(char(16),indate,120),passwd,user_ip,
isnull(@p_code,-1),isnull(@p_num,-1),isnull(@n_code,-1),isnull(@n_num,-1),
content 
from board where code=@code and num=@num
set nocount off

'DB > MSSQL' 카테고리의 다른 글

[MSSQL] 프로시져2  (0) 2022.04.26
[MSSQL]컬럼 목록 및 테이블 리스트  (0) 2022.04.21
[MSSQL] 날짜 형식 맞추기  (0) 2022.04.21
dblink3  (0) 2019.04.02
dblink  (0) 2019.04.02
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,
CREATE  FUNCTION dbo.getDateFormat(@p_brand varchar(64), @p_fieldName varchar(64), @p_value datetime)
 RETURNS VARCHAR(4000)
AS
BEGIN
	declare @val varchar(4000)
	declare @format varchar(4000)
	declare @sql varchar(4000)

	set @format=
		(SELECT top 1 TRAN_VALUE 
		  FROM TB_MEMBER_CODETRAN 
		 WHERE BRAND=@p_brand 
			   AND FIELD_NAME=@p_fieldName 
		)
		
	if @format='date' begin
		set @val = (select @p_value)
	end 
	else begin
		set @val = (select dbo.FNDateFormat(convert(varchar(23),@p_value,121),@format))
	end
	return @val
END

'DB > MSSQL' 카테고리의 다른 글

[MSSQL]컬럼 목록 및 테이블 리스트  (0) 2022.04.21
[MSSQL]프로시져1  (0) 2022.04.21
dblink3  (0) 2019.04.02
dblink  (0) 2019.04.02
dblink2  (0) 2019.03.22
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

dblink3

DB/MSSQL 2019. 4. 2. 16:00

dblink3



스크립트(?)로 하실려면 아래처럼 sp_addlinkedserver 사용.. 

ex.) 

-- 연결시 

EXEC sp_addlinkedserver @server='R_SVR',@srvproduct='SQLServer OLEDB Provider',@provider='SQLOLEDB',@datasrc='아이피' 

GO 


EXEC sp_addlinkedsrvlogin 'R_SVR', 'false', NULL, '접속계정', '계정의 비밀번호' 

GO 


SELECT * 

FROM 연결한서버명(R_SVR).DB명.소유자.테이블명 

GO 

-- 연결해제시 

EXEC sp_dropserver 'R_SVR','droplogins' 

GO

'DB > MSSQL' 카테고리의 다른 글

[MSSQL]프로시져1  (0) 2022.04.21
[MSSQL] 날짜 형식 맞추기  (0) 2022.04.21
dblink  (0) 2019.04.02
dblink2  (0) 2019.03.22
페이지 쿼리2  (0) 2019.03.22
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

dblink

DB/MSSQL 2019. 4. 2. 15:59

dblink


<DB Link순서> 


1. Oracle Client 설치 및 Oracle Net Service Name 등록 하기 


Oracle에 접속하기 위해서는 Oracle client를 설치하고 접속하고자 하는 Oracle DB에 대한 정보를 등록해줘야 한다. 이 과정에서 ODBC Data Source Name과 비슷한 역할을 하는Oracle Net Service Name을 등록하게 된다. 설치 및 ODBC Data Source Name등록에 대한 설명은 Oracle client 설치 가이드를 참고 하기 바란다. 


2. Linked server 등록하기 


Linked server name방식으로 작업을 수행하기 위해서는 Enterprise Manager에서 Linked server를 설정하거나 T-SQL에서 Sp_addLinkedServer, Sp_addLinkedSrvLogin, Sp_serverOption, Sp_dropServer 등을 이용해서 설정하면 된다. 각 SP에 대한 자세한 설명은 BOL(온라인설명서)를 참조하기 바라며, 아래는 Linked server를 생성하는 간단한 예이다. 


(1) Linked server 생성하기 


  sp_addlinkedserver [ @server = ] 'server' 

    [ , [ @srvproduct = ] 'product_name' ] 

    [ , [ @provider = ] 'provider_name' ] 

    [ , [ @datasrc = ] 'data_source' ] 

    [ , [ @location = ] 'location' ] 

    [ , [ @provstr = ] 'provider_string' ] 

    [ , [ @catalog = ] 'catalog' ] 




예) EXEC sp_addlinkedserver  'JYOra817',  'Oracle',  'MSDAORA',  'JY817' 


- JY817이라는 Oracle Net Service Name으로 등록된 Oracle데이터베이스를 JYOra817이라는 이름의 Linked server로 등록한다. 


(2) Login 생성하기 


sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' 

    [ , [ @useself = ] 'useself' ] 

    [ , [ @locallogin = ] 'locallogin' ] 

    [ , [ @rmtuser = ] 'rmtuser' ] 

    [ , [ @rmtpassword = ] 'rmtpassword' ] 


  예) EXEC sp_addlinkedsrvlogin 'JYOra817', 'FALSE', NULL, 'scott', 'tiger' 


- JYOra817이라는 Linked server에 scott/tiger라는 아이디와 패스워드를 이용해서 로그인하는 정보를 등록한다. 


3. Linked server를 이용한 QUERY수행하기 


(1) OPENQUERY() 사용하기 


앞서 생성한 Linked Sever를 이용해서 Query를 수행하고자 할 경우 OPENQUERY()라는 함수를 이용하는 방법이 있으며 구문은 아래와 같다. 


OPENQUERY ( linked_server , 'query' ) 


OPENQUERY를 사용하는 예이다. 

- select empno,ename,sal from OPENQUERY ( JYOra817 , 'select empno,ename,sal from scott.emp' ) 





위의 순서에 따라서 Oracle 클라이언트를 설치하고. Oracle로 접속해서 상대쪽 Oracle 정보를 Select하는것은 성공을 했습니다. 


Oracle 넷 매니저로 등록한 거라서 tnsnames.ora에도 연결할 서버 정보가 나와있습니다 


그런데, 이상하게 openquery로 질의를 날리면 계속 시간만 잡고 전혀 실행이 되질 않습니다. 


혹시나 권한이 없는가 해서 admin 계정 빌려서 접속했는데, 이번에는 mssql server 엔터프라이즈 관리자에서 연결된 서버 확인하자마자 위처럼 계속 시간만 잡아먹고 실행이 전혀 되지 않았습니다. DB가 아예 뻗어버리더군요;; 


방화벽 문젠가 싶어서 저희쪽과 상대방 서버쪽 방화벽을 다 확인해 보았는데도, Mssql-Oracle쪽은 나간 로그나 차단된 로그 자체가 존재하질 않습니다. Oracle로 상대박 Oracle 접속할 때는 허용되거나 차단된 정책이 다 나오는데.. 


Oracle 클라이언트 외에도 여러 버전이 설치가 되어있어서 그런건가요? 


Providename = OraOLEDB.Oracle 로 했는데, 제가 어떤 설정을 잘못한 것인지 알고 싶습니다. 

#T=dblink : mssql 2008 -> oracle 11g 테스트 완료

EXEC master.dbo.sp_addlinkedserver @server = N'test', @srvproduct=N'Oracle', @provider=N'OraOLEDB.Oracle', @datasrc="N'ORCL'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'test',@useself=N'False',@locallogin=NULL,@rmtuser=N'scott',@rmtpassword='1'

 


EXEC master.dbo.sp_serveroption @server=N'test', @optname=N'collation compatible', @optvalue=N'true'

GO

'DB > MSSQL' 카테고리의 다른 글

[MSSQL] 날짜 형식 맞추기  (0) 2022.04.21
dblink3  (0) 2019.04.02
dblink2  (0) 2019.03.22
페이지 쿼리2  (0) 2019.03.22
페이지 쿼리  (0) 2019.03.22
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

dblink2

DB/MSSQL 2019. 3. 22. 13:59

dblink2



SQL 네이티브 클라이언트 OLE DB 공급자 이용



SQL 네이티브 클라이언트 OLE DB 공급자


Microsoft SQL 네이티브 클라이언트 OLE DB 공급자는 Microsoft SQL Server 2005 데이터베이스에 OLE DB 인터페이스를 제공합니다. SQL Server 분산 쿼리는 SQL 네이티브 클라이언트 OLE DB 공급자를 사용하면 분산 쿼리가 SQL Server의 원격 인스턴스에서 데이터를 쿼리할 수 있습니다.


SQL Server 데이터베이스를 액세스하기 위해 연결된 서버를 만들려면 

sp_addlinkedserver를 실행하여 연결된 서버를 만들고 data_source로 SQL Server의 원격 인스턴스를 실행하는 서버의 네트워크 이름을 지정합니다. SQL Server 연결된 서버에서 공급자 SQLNCLI 지정은 선택 항목입니다. 


예를 들어 네트워크 이름이 NetSQLSrvr인 서버에서 실행되는 SQL Server 인스턴스에 대해 작동하는 LinkSQLSrvr라는 연결된 서버를 만들려면 다음 중 하나를 실행하십시오. 


sp_addlinkedserver N'LinkSQLSrvr', ' ', N'SQLNCLI', N'NetSQLSrvr'

sp_addlinkedserver N'LinkSQLSrvr', ' ', ' ', N'NetSQLSrvr'또는 다음 예에서와 같이 SQL Server 연결된 서버를 해당 네트워크 이름으로 정의할 수 있습니다.


sp_addlinkedserver N'NetSQLSrvr'

SQL Server 2000 인스턴스를 실행하는 서버에 대해 분산 쿼리를 실행할 때는 SQL Server 2000 서비스 팩 4(SP4)를 적용하는 것이 좋습니다. SP4를 적용하지 않은 경우 SP4에 포함된 Instcat.sql 스크립트를 실행하여 카탈로그 저장 프로시저를 업그레이드해야 합니다.


분산 쿼리가 SQL Server 버전 7.0 또는 그 이전 버전을 실행하는 서버에 대해 실행될 때는 분산 쿼리가 제대로 작동하도록 이전 버전의 카탈로그 저장 프로시저를 업그레이드해야 합니다. 예를 들어 서버가 SQL Server 7.0 인스턴스를 실행 중인 경우 SQL Server 2005의 인스턴스에서 실행 중인 서버의 분산 쿼리에서 해당 서버의 카탈로그 저장 프로시저를 참조하려면 먼저 카탈로그 저장 프로시저를 SQL Server 2005로 업그레이드해야 합니다. 


원격 SQL Server 테이블이 업데이트되면 로컬 서버나 클라이언트는 이 업데이트에 대해 실행한 트리거로부터 어떤 결과 집합이나 메시지도 받지 못하게 됩니다.


네 부분으로 된 이름을 사용할 때는 항상 스키마 이름을 지정하십시오. 분산 쿼리에 스키마 이름을 지정하지 않으면 OLE DB가 테이블을 찾을 수 없습니다. 로컬 테이블을 참조할 때 소유자 이름을 지정하지 않으면 SQL Server는 기본값을 사용합니다. 다음 SELECT 문은 연결된 서버 로그인이 연결된 서버의 AdventureWorks 데이터베이스에 있는 dbo 사용자에 매핑될 경우에도 7314 오류를 생성합니다.


sp_addlinkedserver @server = N'LinkServer',

    @srvproduct = N' ',

    @provider = N'SQLNCLI', 

    @datasrc = N'ServerNetName', 

    @catalog = N'AdventureWorks'

GO

SELECT *

FROM LinkServer.AdventureWorks.dbo.Vendor다음 예는 네트워크 이름이 othersite인 같은 컴퓨터를 액세스하는 연결된 서버와 원격 서버를 정의합니다. 이 연결된 서버 정의는 원격 서버의 네트워크 이름과 같은 이름을 사용합니다. 원격 서버 정의는 다른 이름을 사용합니다.


/* Create a linked server definition to othersite. */

EXEC sp_addlinkedserver 'othersite', N'SQL Server'


/* Create a remote server definition using a

   fictitious name. */

EXEC sp_addserver 'RPCothersite'


/* Set the fictitious name to the network name far away. */

EXEC sp_setnetname 'RPCothersite', 'othersite'이 이름들은 분산 쿼리나 원격 프로시저 호출에서 참조될 수 있습니다.


/* A distributed query referencing othersite. */

SELECT *

FROM othersite.Northwind.dbo.Employees

/* A remote procedure call to the same server. */

EXEC RPCothersite.master.dbo.sp_who

/* Distributed queries can be used to execute

   stored procedures on the other server. */

EXEC othersite.master.dbo.sp_who연결된 서버를 통해 실행된 저장 프로시저와 원격 서버를 통해 실행된 저장 프로시저의 로그인 매핑 메커니즘에는 몇 가지 차이점이 있습니다. 자세한 내용은 서버 연결을 참조하십시오.


 분산 쿼리의 트랜잭션 고려 사항 

Microsoft SQL 네이티브 클라이언트 OLE DB 공급자는 중첩된 트랜잭션을 지원하지 않습니다. 따라서 여러 Transact-SQL 문이 포함된 트랜잭션 내의 데이터 수정 작업에 대해, 그리고 분산 분할 뷰에 대한 데이터 수정 작업에 대해 XACT_ABORT를 ON으로 설정해야 합니다.

'DB > MSSQL' 카테고리의 다른 글

dblink3  (0) 2019.04.02
dblink  (0) 2019.04.02
페이지 쿼리2  (0) 2019.03.22
페이지 쿼리  (0) 2019.03.22
DBLINK  (0) 2019.03.21
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

페이지 쿼리2

DB/MSSQL 2019. 3. 22. 11:42

페이지 쿼리2




select * from TB_ASBESTOS where u_idx in(

select top 10 u_idx from (

select top 30 u_idx from TB_ASBESTOS order by u_idx asc

) a order by u_idx desc

) order by u_idx asc

'DB > MSSQL' 카테고리의 다른 글

dblink3  (0) 2019.04.02
dblink  (0) 2019.04.02
dblink2  (0) 2019.03.22
페이지 쿼리  (0) 2019.03.22
DBLINK  (0) 2019.03.21
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,