千家信息网

SQL Server如何远程更新目标表数据的存储过程

发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,这篇文章主要介绍SQL Server如何远程更新目标表数据的存储过程,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!远程更新目标库数据的存储过程,适用于更新列名一致,主键为Int
千家信息网最后更新 2025年11月06日SQL Server如何远程更新目标表数据的存储过程

这篇文章主要介绍SQL Server如何远程更新目标表数据的存储过程,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

远程更新目标库数据的存储过程,适用于更新列名一致,主键为Int类型,可远程链接的数据库。

USE [Table]--切换到源表,就是数据最新的那个表GO/****** Object: StoredProcedure [dbo].[proc_DataUpdate] Script Date: 2018/5/4 15:08:56 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author: -- 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--每次执行数量ASdeclare @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 trybegin 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 catchEND

执行存储过程

USE [table] --源表GODECLARE @return_value intEXEC @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_valueGO

以上是"SQL Server如何远程更新目标表数据的存储过程"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

数据 更新 过程 错误 存储 目标 数据库 最大 内容 名称 最大值 篇文章 级别 最小 一致 可不 代码 价值 信息 兴趣 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 淘宝上开软件开发的店咋样 塘厦镇软件开发 网络安全模式怎么没网 河北互通网络技术有限公司招聘 dream服务器 怎么创建药物数据库 拼多多上的服务器出租靠谱吗 淮安应用软件开发服务 信阳职业技术学院网络安全好吗 网络安全法 银行卡 处罚 黑客入侵酒店数据库 东海进口网络技术推荐咨询 王牌竞速怎么登陆以前的服务器 浦东新区提供网络技术咨询热线 匠软件开发心境界 方舟服务器总是崩溃 联想服务器ts150管理口 图书全文数据库 是什么 eda软件开发公司 股票软件开发人员工资 崇州软件开发 软件开发与项目管理考什么内容 专业技术人员网络安全培养 服务器超时登录不上怎么办 助力网络安全法实施 河北人工智能软件开发大概多少钱 移动软件开发符合直招士官吗 软件开发用户文档有哪些 网络安全法征文500字初二 把电脑系统安装到服务器里
0