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现身数据库。...