728x90

▶ 연결된 서버를 만듭니다. 연결된 서버를 만들면 OLE DB 데이터 원본과 유형이 다른 분산 쿼리에 액세스할 수 있습니다. sp_addlinkedserver를 사용하여 연결된 서버를 만든 후 이 서버에 대해 분산 쿼리를 실행할 수 있습니다. 연결된 서버를 SQL Server 인스턴스로 정의한 경우에는 원격 저장 프로시저를 실행할 수 있습니다. 


EXEC SP_ADDLINKEDSERVER
       @server='SQLSRV',  -- 링크드 서버이름
       @srvproduct = '', -- 기본값은 NULL
       @provider = 'SQLOLEDB', -- SQL 서버
       @datasrc = '192.168.122.120', -- 아이피  
       @provstr='',   -- 공백처리 합니다.
       @catalog='AdventureWorks'   -- 특정 카다로그

 

▶ SQL Server 로컬 인스턴스의 로그인과 연결된 서버의 원격 로그인 간의 매핑을 만들거나 업데이트합니다.

 

EXEC SP_ADDLINKEDSRVLOGIN
  @rmtsrvname = 'SQLSRV',
  @useself = 'false',
  @locallogin = null,
  @rmtuser = 'sa',
  @rmtpassword = '1234'

 

특정 원격 또는 복제 서버나 두 유형의 서버 모두에 관한 정보를 보고합니다. 서버 이름, 서버의 네트워크 이름, 서버의 복제 상태, 서버의 ID, 데이터 정렬 이름을 제공합니다. 연결된 서버 연결 또는 쿼리 제한 시간 값도 제공합니다.


EXEC SP_HELPSERVER

728x90

/* mssql */
exec sp_addlinkedserver
 @server='Tulip',
 @srvproduct = 'mssql',
 @provider = 'sqloledb',
 @datasrc = 'Tulip',
 @provstr='',
 @catalog=''
go

exec sp_addlinkedsrvlogin 'TUlip', 'false', null, 'sa', '<sqlpass>'
go


/* Oracle */
EXEC sp_addlinkedserver
  @server = 'INSIDER'
  , @srvproduct = 'oracle'
  , @provider = 'MSDAORA'
  , @datasrc = '211.169.***.***'
Go

EXEC sp_addlinkedsrvlogin
  'INSIDER'
  , 'false'
  , NULL
  , 'scott'
  , 'tiger'
Go



/* File Linked */
-- Create File Linked Srv
exec sp_addlinkedserver FileSrv, 'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:\',
null,
'Text'

-- Login At File Linked Srv
exec sp_addlinkedsrvlogin FileSrv, false, sa, null

-- Drop File Linked Srv Drop
exec sp_droplinkedsrvlogin 'FileSrv', null
exec sp_dropserver FileSrv

-- Show TxtTable File Linked Srv
exec sp_tables_ex FileSrv



use master
go


-- Linked Server를 등록한다.
EXEC  sp_addlinkedserver   
 @server='SecondInstance'
,  @srvproduct=''
,             @provider='SQLOLEDB'
,  @datasrc='snoopy\second'


-- sp_addlinkedserver의 구성을 살펴보면 Linked Server의 정보가 sysserver 테이블에 있음을 알 수 있다.
exec sp_helptext sp_addlinkedserver


-- 등록이 되었나 확인해보자.
select * from sysservers


-- 등록된 Linked Server에 접속할 수 있는 계정을 만들어야 한다.
EXEC sp_addlinkedsrvlogin 'SecondInstance', 'false', NULL, 'id', 'passwd'

-- sp_addlinkedsrvlogin의 구성을 살펴보면 계정 정보가 sysxlogins 테이블에 있음을 알 수 있다.


exec sp_helptext sp_addlinkedsrvlogin


-- 등록이 되었나 확인해보자.
select * from sysxlogins


-- 이제 등록된 Linked Server에 쿼리를 날려보자.
select * from secondinstance.pubs.dbo.sales


-- 등록된 Linked Server의 정보를 지운다.
EXEC sp_droplinkedsrvlogin 'SecondInstance',NULL


EXEC sp_dropserver 'SecondInstance', 'droplogins'

728x90
동적 SQL 은
한 예로 asp, php 등과 같은 서버 스크립트에서 SQL문을 만들 때, 테이블 명이나 필드명을 변수 처리 해서 SQL 문을 유연하게 만든 것과 같습니다.

여러 번 사용할 수 있거나, 동적으로 만들어진 Transact-SQL문 또는 일괄 처리를 실행합니다. Transact-SQL문 또는 일괄 처리는 포함 매개 변수를 포함할 수 있습니다.


구문

sp_executesql [@stmt =] stmt[
   
{, [@params =] N'@parameter_name  data_type [,...n]' }
     {, [@param1 =] 'value1' [,...n] }
]


@stmt 인수에 대하여
Transact-SQL문 또는 일괄 처리를 포함한 유니코드 문자열입니다. stmt는 암시적으로 ntext로 변환될 수 있는 변수 또는 유니코드 상수여야 합니다. + 연산자로 두 개의 문자열을 연결한 식 등과 같은 보다 복잡한 유니코드식은 사용할 수 없습니다. 문자 상수도 사용할 수 없습니다. 상수가 지정된 경우에는 N이라는 접두사가 있어야 합니다.


실제로 테스트를 해 보겠습니다.



pubs DB를 이용한 테스트 : 변수가 하나일 때
 
execute sp_executesql
    N'select * from pubs.dbo.employee where job_lvl = @level',
    N'@level tinyint',
    @level = 35


pubs DB를 이용한 테스트 : 변수가 두개일 때
 
DECLARE @IntVariable INT, @IntVariable2 INT
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)

SET @SQLString = N'SELECT * FROM pubs.dbo.employee WHERE job_lvl = @level and job_id = @job_id'

SET @ParmDefinition = N'@level tinyint, @job_id smallint'

SET @IntVariable = 35
SET @IntVariable2 = 14

EXECUTE sp_executesql @SQLString,
                    @ParmDefinition,
                    @level = @IntVariable,
                    @job_id = @IntVariable2

+ Recent posts