이 문서에서 같은 열 이름은 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
추천
행