sqlserver查看表和存储过程的架构(SQL Server 远程更新目标表数据的存储过程)
类别:数据库 浏览量:1564
时间:2021-10-21 07:54:54 sqlserver查看表和存储过程的架构
SQL Server 远程更新目标表数据的存储过程本文给大家分享一个远程更新目标库数据的存储过程,适用于更新列名一致,主键为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 远程更新目标表数据的存储过程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
您可能感兴趣
- sqlserver数据类型和长度(SqlServer 数据库 三大 范式)
- 修改mysql默认超时(MySQL sql_mode修改不生效的原因及解决)
- mysql单个表可以储存多少内容(浅谈mysql一张表到底能存多少数据)
- mysqlroot本地远程都可登陆(mysql5.7 设置远程访问的实现)
- mysql5.7.36详细安装(CenOS6.7下mysql 8.0.22 安装配置方法图文教程)
- mysql binlog模式实际使用(实例验证MySQL|update字段为相同的值是否会记录binlog)
- mysql8.0.21的安装步骤(mysql8.0.23 msi安装超详细教程)
- mysql高可用集群(MySQL之高可用集群部署及故障切换实现)
- mysql存储json的方式(MySQL中查询json格式的字段实例详解)
- 将SQL Server数据迁移到MySQL的常见工具
- sql优化100个技巧(52条SQL语句教你性能优化)
- mysql的连接池名称如何查看(如何使用mysqladmin获取一个mysql实例当前的TPS和QPS)
- mysql查询数据去除重复(MySQL 大批量插入,如何过滤掉重复数据?)
- mysql设置updatetime自动更新(mysql 实现添加时间自动添加更新时间自动更新操作)
- SQL SERVER连接池
- sqlserver自增字段(SQL Server中identity自增的用法详解)
- 你好,新成理人丨成都理工大学2019级新生开学典礼隆重举行(新成理人丨成都理工大学2019级新生开学典礼隆重举行)
- 这部民警编演的红色话剧,讲述了一个不断追寻的故事(这部民警编演的红色话剧)
- 日本菜有什么好吃(日本菜有什么好吃的做法)
- 韩国泡菜做法(韩国泡菜的做法步骤)
- 泰国旅游攻略(泰国旅游攻略必去景点)
- 越难春卷(越难春卷皮怎么用)
热门推荐
- vue中的定时函数(vue计时器的实现方法)
- 宝塔小程序制作(宝塔面板微信小程序使用图文教程)
- javascript类型转换讲解(JavaScript数据类型转换详解推荐)
- vue实现添加购物车小球(Vue实现简易购物车案例)
- js的逻辑关系和思路(js Proxy的原理详解)
- tomcat运行警告(tomcat异常解决Invalid character found in the request target. The valid characters are defined in)
- springboot+vue项目演示(springboot+VUE实现登录注册)
- SQLServer日期函数总结案例详解(SQLServer日期函数总结案例详解)
- nodejs 内部模块代码(详解Node.js如何处理ES6模块)
- linux安装deb包命令(Linux deb包解压、修改等操作方法代码示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9