단순 실 용 SQL 스 크 립 트 Part SQL Server 2005 링크 서버

적용 필드:원 격 DB 를 조작 합 니 다.
2000 과 2005 의 비교:SQL Server 2000 버 전에 도 원 격 DB 를 연결 하 는 SQL 이 있 지만 기능 이 약 하고 확장 성 이 떨 어 지 며 지원 하 는 조회 가 간단 합 니 다.한편,SQL Server 2005 버 전의 SSMS 에는 서버 대상->서버 를 연결 하 는 기능 점 이 있 습 니 다.사용 자 는 먼저 원 격 DB 의 링크 대상 을 만 든 다음 에 이 지표 처럼 표 의 DML 을 실행 할 수 있 습 니 다.
생 성 절차:SQL Server 2005 버 전에 서 SSMS 를 열 고 서버 대상->링크 서버->새 링크 서버 를 오른쪽 클릭 합 니 다.그림 2 에서 설정 방식 이 고 다른 설정 방식 도 있 습 니 다.예 를 들 어[도해]sqlserver 에 링크 서버 만 들 기그림 3 은 안전성 옵션 에서 원 격 데이터 베 이 스 를 설정 하 는 계 정과 비밀 번 호 를 설정 합 니 다.
 
(그림 1:새 링크) 
 
(그림 2:링크 설정) 
 
(그림 3:계 정 설정) 
 
주의사항:MSSQL 2005 에서 Rpc 의 기본 설정 은 그림 4 와 같 습 니 다.그림 5 로 설정 하고 원 격 링크->속성->서버 옵션->Rpc 와 Rpc Out 을 오른쪽 클릭 하 십시오.이 두 값 은 True 로 설정 해 야 합 니 다.
 
(그림 4:기본 설정) 
 
(그림 5:올 바른 설정) 
그러나 MSSQL 2008 에 서 는 링크 서버'ETV 2'를 직접 수정 할 수 없습니다.LINK'의 RPC 는 TURE 로 설정 되 어 있 으 며,문 구 를 통 해 다음 과 같이 수정 할 수 있 습 니 다.
USE [master]GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'rpc', @optvalue=N'true'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'rpc out', @optvalue=N'true'GO
 
스 크 립 트 생 성:조작 인터페이스 를 통 해'ETV 2'가 생 성 되 었 다 면LINK 의 링크 서버 는 다른 데이터베이스(배치,업데이트)에 이식 할 필요 가 있 을 때 아래 의 방법 으로 SQL 스 크 립 트 를 생산 할 수 있 습 니 다.SQL 스 크 립 트 를 수정 하여 링크 서버 를 빠르게 새로 만 들 거나 수정 할 수 있 습 니 다.예 를 들 어@server 링크 서버 이름 을 수정 하고@datasrc 원 격 링크 의 데이터베이스 대상 을 수정 할 수 있 습 니 다.
 
(그림 6:SQL 스 크 립 트 생 성) 
 SQL Server 2005 원 격 링크 대상 을 만 드 는 SQL 스 크 립 트:
/****** 대상:  LinkedServer [ETV2_LINK]    스 크 립 트 날짜: 09/08/2010 17:36:11 ******/EXEC master.dbo.sp_addlinkedserver @server = N'ETV2_LINK', @srvproduct=N'ETV2_LINK', @provider=N'SQLNCLI', @datasrc=N'BWA035\BWA035_2K5'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'collation compatible', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'data access', @optvalue=N'true'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'dist', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'pub', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'rpc', @optvalue=N'true'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'rpc out', @optvalue=N'true'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'sub', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'connect timeout', @optvalue=N'0'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'collation name', @optvalue=nullGOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'lazy schema validation', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'query timeout', @optvalue=N'0'GOEXEC master.dbo.sp_serveroption @server=N'ETV2_LINK', @optname=N'use remote collation', @optvalue=N'true'
 
사용:ETV 2 라 는 이름 을 만 들 었 다 고 가정 합 니 다.LINK 의 원 격 링크 대상 은 아래 와 같이 원 격 DB 를 조작 할 수 있 습 니 다.사용 필드 1:검색 ETV 2LINK 라 는 원 격 링크 대상 의[etV2온라인]데이터베이스 에서 VisiteLog201060629 표 의 데이터.템 플 릿:Select*From[링크 서버 이름][원 격 데이터베이스 이름][소유자][표 이름]
--원 격 DB 테이블 이름 선택 조회 * from ETV2_LINK.[etV2_Online].dbo.VisiteLog_20100629
 
사용 장면 2:판단 ETV 2LINK 라 는 원 격 링크 대상 의[etV2Online]데이터베이스 에 VisiteLog 가 존재 하 는 지 여부201060629 의 시계.
--메모:sys.objects 입 니 다.sysobjects 가 아 닙 니 다.-원 격 사용자 에 게 표 IF 가 존재 하 는 지 판단 합 니 다. EXISTS (SELECT * FROM ETV2_LINK.[etV2_Online].sys.objects WHERE name = N'VisiteLog_20100629' AND type in (N'U'))BEGIN    --논리 적 처리    print '존재 표'END
 
사용 장면 3:원 거리 DB 를 판단 하 는[etV2Online]데이터베이스 에 VisiteLog 가 존재 하 는 지 여부201060629 의 시계.다만 이 표 이름 은 매개 변수 화 되 어 들 어 오 는 매개 변 수 를 통 해 판단 할 수 있 습 니 다.변수의 값 을 간단하게 설정 하고 OUT 를 사용 하여 변 수 를 되 돌려 줍 니 다. 
--원 격 사용자 에 게 어떤 테이블(매개 변수 화 테이블 이름)이 존재 하 는 지 판단 하고 변수 DECLARE 를 되 돌려 준다 @IsExistTable VARCHAR(10)DECLARE @Tablename VARCHAR(50)DECLARE @sqlString NVARCHAR(4000)SET @IsExistTable = 'False'SET @Tablename = 'VisiteLog_'+convert(varchar(9),getdate()-1,112) --예 를 들 어 VisiteLog20100629SET @sqlString = 'IF EXISTS (SELECT * FROM ETV2_LINK.[etV2_Online].sys.objects WHERE name = N'''+@Tablename+''' AND type in (N''U''))    set @IsExistTableOUT =''True'''EXEC sp_executesql @sqlString,N'@IsExistTableOUT varchar(10) OUTPUT',@IsExistTableOUT=@IsExistTable OUTPUTIF (@IsExistTable = 'True')-존재 BEGIN    --논리 적 처리    print '존재 표'END
 
추가:SQL Server 2000 버 전 으로 원 격 서버 를 연결 하 는 SQL 스 크 립 트 입 니 다.더 많은 관련 발걸음 은 참고 할 수 있 습 니 다T-SQL 구문 에서 원 격 데이터 베 이 스 를 방문 합 니 다(openrowset/opendatasource/openquery) 
--방법 1:select *  from openrowset('SQLOLEDB','server=192.168.0.67;uid=sa;pwd=password','SELECT * FROM BCM2.dbo.tbAppl')-방법 2:select *  from openrowset('SQLOLEDB','192.168.0.67';'sa';'password','SELECT * FROM BCM2.dbo.tbAppl') 작자:바람 과 비 를 듣다

좋은 웹페이지 즐겨찾기