원격 업데이트 대상 라이브러리 데이터 저장 프로세스를 공유하기

  이 문서에서 같은 열 이름은 INT 타입에 대한 기본 키, 원격 연결된 데이터베이스를 갱신하기위한 원격 갱신 대상 라이브러리 데이터 저장 처리를 공유한다.
- 사용은 [표] 소스 테이블로 전환, 그 표는 최신 데이터입니다
GO
** 2018년 5월 4일 15시 8분 56초 : / ****** 객체 :.의 StoredProcedure [DBO] [proc_DataUpdate] 스크립트 날짜 **** /
하여 ON ANSI_NULLS는 SET
이동
집합은 QUOTED_IDENTIFIER를 ON을
이동 (http://www.0831jlyy.com)
- ======================== =====================
- 저자 : <그롬>
- 작성 날짜 : <2018년 5월 4일>
- 설명 : <배치 갱신 원격 데이터 지원 테이블 INT에만 기본 키>
- ======================================== =====
(가) CREATE PROCEDURE [dbo가]. proc_DataUpdate]
@TargetInstance NVARCHAR (최대)
@TargetDBName NVARCHAR (최대)
@TargetUID NVARCHAR을 (최대)
@TargetPWD NVARCHAR을 (최대)
@LocalDBName NVARCHAR을 (최대),
@PK_ID NVARCHAR (최대) - 기본 키 컬럼 (되어야 번호)
@Column NVARCHAR (최대) - 열 이름의 세트 업데이트
마다 int-- @ExecSize을 수
는 AS
(최대) DECLARE의 @Sql의 NVARCHAR,
@NumMax의 INT 0 =
@NumMin INT = 0
하는 int @MaxID
시작 (http://jlyy0831.com)
-에서 추가 결과 세트에서 Set 방지하기 위해 상기 NOCOUNT 추가
선택 (SELECT) 문과 간섭 - 기간.
- 세트에 상기 NOCOUNT를 - 개방 과정을 표시 할 수있다 참고 고속화 수행
는 시도를 시작
  최대치 -
  ] + @ LocalDBName '에서'(+ @ + PK_ID) 'MaxID SELECT MAX = @'= SET의 @Sql를
  Exec에서 '@ MaxID INT OUT'SQL, N @ sp_executesql을 , MaxID OUT @
  - 사이클
  그동안 (@NumMax <@MaxID)
  (가) 시작
    IF 존재 (SELECT * WHERE ID = object_id에 tempdb.dbo.sysobjects (N'tempdb의 tmp_table .. ##에서 ')과 TYPE ='는 U- ')
    테이블을 삭제 ## tmp_table;
    SET의 @Sql = '선택 상단'+ 캐스트 (@ExecSize로 NVARCHAR (1000)) + ''+ @Column + ''+ @ LocalDBName + '어디에서'+ @ PK_ID + '>'+ 캐스트에서 ## tmp_table로 (@NumMax NVARCHAR 등 (150));
    간부 sp_executesql을 @Sql;
    -记录执行最大值
    SQL @ SET = '(+ @ PK_ID +') NumMax = MAX @ 선택 '에서 ## tmp_table';
    간부 sp_executesql을 @ SQL, N 아웃 NumMax @ 'NumMax 아웃 값 int @';
    -记录执行最小值
    SQL @ SET = '(+ @ PK_ID +') NumMin = MIN @ 선택 '에서 ## tmp_table';
    간부 sp_executesql을 @ SQL, N, @ NumMin 아웃 'NumMin 아웃 값 int @';
    SET @ SQL = '삭제 OPENROWSET (' 'SQLOLEDB' ',' ''+ @ TargetInstance + '' ',' ''+ @ TargetUID + '' ',' '
    여기서,는 '+ @ PK_ID +'와 '+ 캐스트 (NVARCHAR 같은 @NumMin (200)) +'및 '+ 캐스트 (@NumMax NVARCHAR 등 (200));
    간부 sp_executesql을 @Sql;
    'SQLOLEDB'SET @ SQL = 'OPENROWSET (내로 삽입' ',' ''+ @ TargetInstance + '' '' '' '+ @ TargetUID +' '' '' ''+ @ TargetPWD + '' '['+ @ TargetDBName + '] [DBO]..'+ @ LocalDBName + '])
    ('+ @ 열 + ')
    를 선택'+ @Column + '행 ## tmp_table'
    간부 sp_executesql을 @Sql;
  종료
  -删除多余数据
  SET를 @ SQL = '삭제 OPENROWSET (' 'SQLOLEDB' ',' ''+ @ TargetInstance + '' ',' ''+ @ TargetUID + '' ',' ''+ @ TargetPWD + '' ', [ '+ @ TargetDBName +'].
  . DBO] '+ @ LocalDBName +']) 여기서 '+ @ PK_ID +'> '+ 캐스트 (@NumMax NVARCHAR 등 (200));
  테이블을 삭제 ## tmp_table;
  '성공'을 인쇄;
최종 시도 (http://www.0834xcjl.com)
캐치 시작
  오류 코드 - ErrorNumber로 ERROR_NUMBER (), 선택
  ErrorSeverity로 ERROR_SEVERITY () - 오류 심각도 레벨을 10 이상 시도 캐치 캡처
  ErrorState로 ERROR_STATE () - 에러 상태 코드
  ERROR_PROCEDURE () ErrorProcedure으로, - 저장 프로 시저 또는 트리거의 이름을 잘못 발생합니다.
  ErrorLine 같은 ERROR_LINE () - 오류가 발생한 줄 수
  ErrorMessage가 같은 ERROR_MESSAGE () - 오류 특정 정보
  tmp_table 표 ## 드롭,
캐치 엔드
끝에
저장 프로 시저 실행
USE [표] - 소스 테이블
이동
DECLARE @return_value INT
EXEC을 . @return_value =는 [dbo가 [proc_DataUpdate]
@TargetInstance = N은 '-', 대상 라이브러리와 같은 원격 데이터베이스 인스턴스가 네트워크 주소의 사용하지 않는 도메인 아니다
'@TargetDBName = N을'- 원격 데이터베이스 이름
@TargetUID = N ''- 사용자 이름
@TargetPWD = N '', - 암호
@ LocalDBName = N ''- 테이블 (소스 테이블)을 업데이트
@PK_ID = N ',
@ 열 = 'ID, 이름' , - 예 'A, B, C'의 열 이름들의 세트를 업데이트
ExecSize에게 = 200--의 각 실행 횟수 @
@return_value 선택 (SELECT) '리턴 값'=
이동
상술 작은 반응시켜 SQL Server가 원격 대상 테이블을 데이터 저장 과정을 업데이트 소개, 우리가 도와주고 싶어요.

추천

출처www.cnblogs.com/HanaKana/p/12005169.html