繁体   English   中英

使用所有表中的新数据自动更新特定列的特定数据

[英]Automatically update particular data of a specific column with new data in all tables

--TO UPDATE PARTICULAR COLUMN IN ALL TABLES IN A DATABASE
declare 
      @query nvarchar(max)='',
      @newValue varchar(10)='NEWVALUEHERE', 
      @oldValue varchar(10)='OLDVALUEHERE'

select 
    @query = @query + ' Update ' +
             quotename(object_name(c.object_id)) + 
             ' set [COLUMNNAMEHERE] = @newValue where [COLUMNNAMEHERE] = @oldValue ;'
from 
    sys.columns c 
join
    sys.all_objects o on c.object_id = o.object_id 
where 
    c.name = 'COLUMNNAMEHERE' and o.type = 'U'

select @query

--IF EVERYTHING SEEMS FINE COMMENT THE UPPER LINE AND UNCOMMENT THE LINE BELOW AND EXECUTE
--exec sp_executesql @query, N'@newValue varchar(10), @oldValue varchar(10)', @newValue=@newValue,@oldValue=@oldValue

所以,我有这个可以完成工作的查询,但是在执行select @query之后,我需要手动复制粘贴结果并替换; \n go \n' Update ' + quotename(object_name(c.object_id)) + ' set [COLUMNNAMEHERE] = @newValue where [COLUMNNAMEHERE] = @oldValue;' Ctrl + H中使用正则表达式选项,因为可能会提前结束查询执行的潜在错误。

由于我查询的最后一行

exec sp_executesql @query, N'@newValue varchar(10), @oldValue varchar(10)', @newValue=@newValue,@oldValue=@oldValue

变得无用,我无法自动执行此查询。

如果必须这样做,只需在动态 SQL 中使用CHAR(10)

declare 
      @query nvarchar(max)='',
      @newValue varchar(10)='NEWVALUEHERE', 
      @oldValue varchar(10)='OLDVALUEHERE'

select @query = @query + 'Update ' + quotename(object_name(c.object_id)) + ' set [COLUMNNAMEHERE] = @newValue where [COLUMNNAMEHERE] = @oldValue;' + CHAR(10) + 'GO' + CHAR(10)
from sys.columns c JOIN sys.all_objects o on c.object_id=o.object_id 
where c.name = 'COLUMNNAMEHERE' and o.type='U'

select @query

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM