我知道以前有人问过类似的问题,但我想知道是否有任何方法可以在存在列名的数据库中的所有表中运行更新,但只对具有特定条目的字段运行更新。
所以,例如UPDATE <table> SET <column_name> = '123' where <column_name> = '124'
提前感谢大家的帮助
发布于 2016-09-14 15:55:38
这个答案将需要一些动态SQL,并且可能会使用while/do循环。
基本上,我们的想法将是计算我们如何定义表和列名列表。如果您确实只是在寻找列名存在的表的列表,那么您可能希望使用sys.syscolumns表来查询列名。
SELECT o.name
FROM sys.syscolumns c
JOIN sys.sysobjects o ON c.id=o.id
WHERE UPPER(c.name) = 'Description'从这里可以构建动态sql语句。
DECLARE @sqltext VARCHAR(MAX)
DECLARE @UpdateValue VARCHAR(30) = 'SetThisValue'
SELECT @sqltext = ISNULL(@sqltext,'') + 'UPDATE '+o.name + CHAR(10) + ' SET [YourColumnNameHere] = ' + @UpdateValue + CHAR(10)
+ ' WHERE [YourColumnNameHere] = [Somevalue]'
FROM sys.syscolumns c
JOIN sys.sysobjects o ON c.id=o.id
WHERE UPPER(c.name) = 'Description'
PRINT @sqltext
EXEC sp_executesql @sqltext我在里面有print语句,以帮助您按照您想要的方式获得@sqltext。一旦您想得到它,就使用EXEC sp_executesql行实际运行@sqltext的输出。
发布于 2016-09-14 15:50:43
您可以使用动态SQL构建像这样的update语句。
SELECT 'UPDATE [' + name + '] SET <column_name> = ''123'' where <column_name> = ''124'''
FROM sys.tableshttps://dba.stackexchange.com/questions/149688
复制相似问题