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