SQL Server如何远程更新目标表数据的存储过程
这篇文章主要介绍SQL Server如何远程更新目标表数据的存储过程,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
远程更新目标库数据的存储过程,适用于更新列名一致,主键为Int类型,可远程链接的数据库。
USE[Table]--切换到源表,就是数据最新的那个表GO/******Object:StoredProcedure[dbo].[proc_DataUpdate]ScriptDate:2018/5/415:08:56******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--=============================================--Author:<Grom>--Createdate:<2018-05-04>--Description:<分批更新远程数据,仅支持主键为int表>--=============================================CREATEPROCEDURE[dbo].[proc_DataUpdate]@TargetInstancenvarchar(max),@TargetDBNamenvarchar(max),@TargetUIDnvarchar(max),@TargetPWDnvarchar(max),@LocalDBNamenvarchar(max),@PK_IDnvarchar(max),--主键列(必须为数字)@Columnnvarchar(max),--更新列名集合@ExecSizeint--每次执行数量ASdeclare@sqlnvarchar(max),@NumMaxint=0,@NumMinint=0,@MaxIDintBEGIN--SETNOCOUNTONaddedtopreventextraresultsetsfrom--interferingwithSELECTstatements.--SETNOCOUNTON;--打开注释可不显示执行过程,提高速度begintry --取最大值 set@sql='select@MaxID=MAX('+@PK_ID+')from'+@LocalDBName; execsp_executesql@sql,N'@MaxIDintout',@MaxIDout --循环 while(@NumMax<@MaxID) begin ifexists(select*fromtempdb.dbo.sysobjectswhereid=object_id(N'tempdb..##tmp_table')andtype='U') droptable##tmp_table; SET@sql='selecttop'+cast(@ExecSizeasnvarchar(1000))+''+@Column+'into##tmp_tablefrom'+@LocalDBName+'where'+@PK_ID+'>'+cast(@NumMaxasnvarchar(150)); execsp_executesql@sql; --记录执行最大值 SET@SQL='select@NumMax=MAX('+@PK_ID+')from##tmp_table'; execsp_executesql@sql,N'@NumMaxintout',@NumMaxout; --记录执行最小值 SET@SQL='select@NumMin=MIN('+@PK_ID+')from##tmp_table'; execsp_executesql@sql,N'@NumMinintout',@NumMinout; SET@sql='deleteopenrowset(''SQLOLEDB'','''+@TargetInstance+''';'''+@TargetUID+''';'''+@TargetPWD+''',['+@TargetDBName+'].[dbo].['+@LocalDBName+']) where'+@PK_ID+'between'+cast(@NumMinasnvarchar(200))+'and'+cast(@NumMaxasnvarchar(200)); execsp_executesql@sql; SET@sql='insertintoopenrowset(''SQLOLEDB'','''+@TargetInstance+''';'''+@TargetUID+''';'''+@TargetPWD+''',['+@TargetDBName+'].[dbo].['+@LocalDBName+']) ('+@Column+') select'+@Column+'from##tmp_table' execsp_executesql@sql; end --删除多余数据 SET@sql='deleteopenrowset(''SQLOLEDB'','''+@TargetInstance+''';'''+@TargetUID+''';'''+@TargetPWD+''',['+@TargetDBName+'].[dbo].['+@LocalDBName+']) where'+@PK_ID+'>'+cast(@NumMaxasnvarchar(200)); droptable##tmp_table; print'Success';endtrybegincatch selectError_number()asErrorNumber,--错误代码 Error_severity()asErrorSeverity,--错误严重级别,级别小于10trycatch捕获不到 Error_state()asErrorState,--错误状态码 Error_Procedure()asErrorProcedure,--出现错误的存储过程或触发器的名称。 Error_line()asErrorLine,--发生错误的行号 Error_message()asErrorMessage--错误的具体信息 droptable##tmp_table;endcatchEND
执行存储过程
USE[table]--源表GODECLARE@return_valueintEXEC@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'ReturnValue'=@return_valueGO
以上是“SQL Server如何远程更新目标表数据的存储过程”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。