文章主要介紹了SQL Server 遠(yuǎn)程更新目標(biāo)表數(shù)據(jù)的存儲(chǔ)過(guò)程,適用于更新列名一致,主鍵為Int類型,具體實(shí)例代碼大家參考下本文
本文給大家分享一個(gè)遠(yuǎn)程更新目標(biāo)庫(kù)數(shù)據(jù)的存儲(chǔ)過(guò)程,適用于更新列名一致,主鍵為Int類型,可遠(yuǎn)程鏈接的數(shù)據(jù)庫(kù)。
USE [
Table
]
--切換到源表,就是數(shù)據(jù)最新的那個(gè)表
GO
/****** Object: StoredProcedure [dbo].[proc_DataUpdate] Script
Date
: 2018/5/4 15:08:56 ******/
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
-- =============================================
-- Author: <Grom>
-- Create date: <2018-05-04>
-- Description: <分批更新遠(yuǎn)程數(shù)據(jù),僅支持主鍵為int表>
-- =============================================
CREATE
PROCEDURE
[dbo].[proc_DataUpdate]
@TargetInstance nvarchar(
max
),
@TargetDBName nvarchar(
max
),
@TargetUID nvarchar(
max
),
@TargetPWD nvarchar(
max
),
@LocalDBName nvarchar(
max
),
@PK_ID nvarchar(
max
),
--主鍵列(必須為數(shù)字)
@
Column
nvarchar(
max
),
--更新列名集合
@ExecSize
int
--每次執(zhí)行數(shù)量
AS
declare
@sql nvarchar(
max
),
@NumMax
int
=0,
@NumMin
int
=0,
@MaxID
int
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
-- SET NOCOUNT ON;--打開(kāi)注釋可不顯示執(zhí)行過(guò)程,提高速度
begin
try
--取最大值
set
@sql =
'select @MaxID=MAX('
+@PK_ID+
') from '
+@LocalDBName;
exec
sp_executesql @sql,N
'@MaxID int out'
,@MaxID
out
--循環(huán)
while(@NumMax<@MaxID)
begin
if exists (
select
*
from
tempdb.dbo.sysobjects
where
id = object_id(N
'tempdb..##tmp_table'
)
and
type=
'U'
)
drop
table
##tmp_table;
SET
@sql =
'select top '
+
cast
(@ExecSize
as
nvarchar(1000))+
' '
+ @
Column
+
' into ##tmp_table from '
+@LocalDBName+
' where '
+@PK_ID+
'>'
+
cast
(@NumMax
as
nvarchar(150));
exec
sp_executesql @sql;
--記錄執(zhí)行最大值
SET
@SQL=
'select @NumMax=MAX('
+@PK_ID+
') from ##tmp_table'
;
exec
sp_executesql @sql,N
'@NumMax int out'
,@NumMax
out
;
--記錄執(zhí)行最小值
SET
@SQL=
'select @NumMin=MIN('
+@PK_ID+
') from ##tmp_table'
;
exec
sp_executesql @sql,N
'@NumMin int out'
,@NumMin
out
;
SET
@sql=
'delete openrowset('
'SQLOLEDB'
','
''
+@TargetInstance+
''
';'
''
+@TargetUID+
''
';'
''
+@TargetPWD+
''
',['
+@TargetDBName+
'].[dbo].['
+@LocalDBName+
'])
where '
+@PK_ID+
' between '
+
cast
(@NumMin
as
nvarchar(200))+
' and '
+
cast
(@NumMax
as
nvarchar(200));
exec
sp_executesql @sql;
SET
@sql=
'insert into openrowset('
'SQLOLEDB'
','
''
+@TargetInstance+
''
';'
''
+@TargetUID+
''
';'
''
+@TargetPWD+
''
',['
+@TargetDBName+
'].[dbo].['
+@LocalDBName+
'])
('
+@
Column
+
')
select '
+ @
Column
+
' from ##tmp_table'
exec
sp_executesql @sql;
end
--刪除多余數(shù)據(jù)
SET
@sql=
'delete openrowset('
'SQLOLEDB'
','
''
+@TargetInstance+
''
';'
''
+@TargetUID+
''
';'
''
+@TargetPWD+
''
',['
+@TargetDBName+
'].[dbo].['
+@LocalDBName+
'])
where '
+@PK_ID+
' >'
+
cast
(@NumMax
as
nvarchar(200));
drop
table
##tmp_table;
print
'Success'
;
end
try
begin
catch
select
Error_number()
as
ErrorNumber,
--錯(cuò)誤代碼
Error_severity()
as
ErrorSeverity,
--錯(cuò)誤嚴(yán)重級(jí)別,級(jí)別小于10 try catch 捕獲不到
Error_state()
as
ErrorState ,
--錯(cuò)誤狀態(tài)碼
Error_Procedure()
as
ErrorProcedure ,
--出現(xiàn)錯(cuò)誤的存儲(chǔ)過(guò)程或觸發(fā)器的名稱。
Error_line()
as
ErrorLine,
--發(fā)生錯(cuò)誤的行號(hào)
Error_message()
as
ErrorMessage
--錯(cuò)誤的具體信息
drop
table
##tmp_table;
end
catch
END
執(zhí)行存儲(chǔ)過(guò)程
USE [
table
]
--源表
GO
DECLARE
@return_value
int
EXEC
@return_value = [dbo].[proc_DataUpdate]
@TargetInstance = N
''
,
--遠(yuǎn)程數(shù)據(jù)庫(kù)實(shí)例 如目標(biāo)庫(kù)不在一個(gè)域,切勿使用內(nèi)網(wǎng)地址
@TargetDBName = N
''
,
--遠(yuǎn)程數(shù)據(jù)庫(kù)名稱
@TargetUID = N
''
,
--用戶名
@TargetPWD = N
''
,
--密碼
@LocalDBName=N
''
,
--用于更新表名 (源表)
@PK_ID =N
''
,
--主鍵列(必須為Int)
@
Column
=
'ID,Name'
,
--更新列名集合 例 'A,B,C'
@ExecSize=200
--每次執(zhí)行條數(shù)
SELECT
'Return Value'
= @return_value
GO
總結(jié)
以上所述是小編給大家介紹的SQL Server 遠(yuǎn)程更新目標(biāo)表數(shù)據(jù)的存儲(chǔ)過(guò)程,希望對(duì)大家有所幫助,
- MsSql 數(shù)據(jù)庫(kù)使用sqlplus創(chuàng)建DDL和DML操作方法
- SQL Server常見(jiàn)問(wèn)題介紹及快速解決建議
- SQL Server中Table字典數(shù)據(jù)的查詢SQL示例代碼
- SQL SERVER 2012數(shù)據(jù)庫(kù)自動(dòng)備份的方法
- 關(guān)于SQL server2008調(diào)試存儲(chǔ)過(guò)程的完整步驟
- SQL Server數(shù)據(jù)庫(kù)調(diào)整表中列的順序操作方法及遇到問(wèn)題
- SQL Server中的SELECT會(huì)阻塞SELECT相關(guān)資料
- 利用數(shù)據(jù)庫(kù)trigger對(duì)安全進(jìn)行監(jiān)控
- 完成Excel動(dòng)態(tài)鏈接外部數(shù)據(jù)庫(kù)
- 6.9英寸可還行 疑華為P9 Max現(xiàn)身數(shù)據(jù)庫(kù)
分享到:
投訴收藏