首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新所有包含列名的表,其中字段是特定的

更新所有包含列名的表,其中字段是特定的
EN

Database Administration用户
提问于 2016-09-14 15:43:05
回答 2查看 4.5K关注 0票数 1

我知道以前有人问过类似的问题,但我想知道是否有任何方法可以在存在列名的数据库中的所有表中运行更新,但只对具有特定条目的字段运行更新。

所以,例如UPDATE <table> SET <column_name> = '123' where <column_name> = '124'

提前感谢大家的帮助

EN

回答 2

Database Administration用户

回答已采纳

发布于 2016-09-14 15:55:38

这个答案将需要一些动态SQL,并且可能会使用while/do循环。

基本上,我们的想法将是计算我们如何定义表和列名列表。如果您确实只是在寻找列名存在的表的列表,那么您可能希望使用sys.syscolumns表来查询列名。

代码语言:javascript
复制
SELECT o.name
FROM sys.syscolumns c
    JOIN sys.sysobjects o ON c.id=o.id
WHERE UPPER(c.name) = 'Description'

从这里可以构建动态sql语句。

代码语言:javascript
复制
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的输出。

票数 1
EN

Database Administration用户

发布于 2016-09-14 15:50:43

您可以使用动态SQL构建像这样的update语句。

代码语言:javascript
复制
SELECT 'UPDATE [' + name + '] SET <column_name> = ''123'' where <column_name> = ''124'''
FROM sys.tables
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/149688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档