SQL Server數據庫遠程更新目標表數據的存儲過程
文章主要介紹了SQL Server 遠程更新目標表數據的存儲過程,適用于更新列名一致,主鍵為Int類型,具體實例代碼大家參考下本文本文給大家分享一個遠程更新目標庫數據的存儲過程,適用...
本文給大家分享一個遠程更新目標庫數據的存儲過程,適用于更新列名一致,主鍵為Int類型,可遠程鏈接的數據庫。
USE [
Table
]
--切換到源表,就是數據最新的那個表
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: <分批更新遠程數據,僅支持主鍵為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
),
--主鍵列(必須為數字)
@
Column
nvarchar(
max
),
--更新列名集合
@ExecSize
int
--每次執行數量
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;--打開注釋可不顯示執行過程,提高速度
begin
try
--取最大值
set
@sql =
'select @MaxID=MAX('
+@PK_ID+
') from '
+@LocalDBName;
exec
sp_executesql @sql,N
'@MaxID int out'
,@MaxID
out
--循環
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;
--記錄執行最大值
SET
@SQL=
'select @NumMax=MAX('
+@PK_ID+
') from ##tmp_table'
;
exec
sp_executesql @sql,N
'@NumMax int out'
,@NumMax
out
;
--記錄執行最小值
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
--刪除多余數據
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,
--錯誤代碼
Error_severity()
as
ErrorSeverity,
--錯誤嚴重級別,級別小于10 try catch 捕獲不到
Error_state()
as
ErrorState ,
--錯誤狀態碼
Error_Procedure()
as
ErrorProcedure ,
--出現錯誤的存儲過程或觸發器的名稱。
Error_line()
as
ErrorLine,
--發生錯誤的行號
Error_message()
as
ErrorMessage
--錯誤的具體信息
drop
table
##tmp_table;
end
catch
END
執行存儲過程
USE [
table
]
--源表
GO
DECLARE
@return_value
int
EXEC
@return_value = [dbo].[proc_DataUpdate]
@TargetInstance = N
''
,
--遠程數據庫實例 如目標庫不在一個域,切勿使用內網地址
@TargetDBName = N
''
,
--遠程數據庫名稱
@TargetUID = N
''
,
--用戶名
@TargetPWD = N
''
,
--密碼
@LocalDBName=N
''
,
--用于更新表名 (源表)
@PK_ID =N
''
,
--主鍵列(必須為Int)
@
Column
=
'ID,Name'
,
--更新列名集合 例 'A,B,C'
@ExecSize=200
--每次執行條數
SELECT
'Return Value'
= @return_value
GO
總結
以上所述是小編給大家介紹的SQL Server 遠程更新目標表數據的存儲過程,希望對大家有所幫助,
MsSql 數據庫使用sqlplus創建DDL和DML操作方法
文章主要介紹了使用sqlplus創建DDL和DML操作方法,需要的朋友可以參考下,在window進入命令行模式敲sqlplus就會...
SQL Server常見問題介紹及快速解決建議
本文旨在幫助SQL Server數據庫的使用人員了解常見的問題,及快速解決這些問題。這些問題是數據庫的常規管理問題,對于很多對數據庫沒有深入了解的朋友提供一個大概的常見問題框架。...
SQL Server中Table字典數據的查詢SQL示例代碼
文章主要給大家介紹了關于SQL Server中Table字典數據的查詢SQL的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著...
SQL SERVER 2012數據庫自動備份的方法
文章主要為大家詳細介紹了SQL SERVER 2012數據庫自動備份的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下為了防止數據丟失,這里給大家介紹SQL SERVER2012數據自動備...
關于SQL server2008調試存儲過程的完整步驟
文章主要給大家分享介紹了關于sql server2008調試存儲過程的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編...
SQL Server數據庫調整表中列的順序操作方法及遇到問題
文章主要介紹了SQL Server 數據庫調整表中列的順序操作,文中給大家通過詳細步驟介紹了需求及問題描述 ,需要的朋友可以參考下SQL Server 數據庫中表一旦創建,我們不建議擅自調...
SQL Server中的SELECT會阻塞SELECT相關資料
文章主要給大家介紹了SQL Server中的SELECT會阻塞SELECT的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧前言在SQL Server中...
利用數據庫trigger對安全進行監控
最近幫一個朋友看他們的網站安全問題,他們非常擔心系統中的數據被篡改,因為一旦篡改可能就別人兌換東西或者套現走了就會造成損失,而最典型的修改一般都是利用事務性不一致和一些數據庫中的溢出等錯誤和直接獲取權...
完成Excel動態鏈接外部數據庫
我們有時需要在Excel中調取其他數據庫的數據,并且希望其他數據庫數據改變時,Excel中調取的數據也隨之動態改變。下面介紹在Excel中通過“新建數據庫查詢”(MicrosoftQuery)的方法來實現動態鏈接數據庫。...
6.9英寸可還行 疑華為P9 Max現身數據庫
中關村在線訊:眾所周知,華為P9國行版將于今日在國內正式發布,按照華為的一貫風格,在P9發布之后,很可能會再發布青春版以及Max版本,而后者的身影近日已經在GFXBench跑分數據庫中出現了。疑似華為P9Max現身數據庫。...