查找具有特定列名称和特定值的所有表

时间:2014-12-12 23:02:27

标签: sql sql-server tsql stored-procedures sql-update

我需要将AccountID ='123'的所有表中的所有AccountID列更新为'xyz' 我想确保我只查找表格,而不是查看。 以下是我尝试查找表格的示例:

SELECT t.name AS TableName
FROM sys.columns c
JOIN sys.types y ON c.user_type_id = y.user_type_id
JOIN sys.tables t ON c.object_id = t.object_id
JOIN sysobjects o ON o.name = t.name
WHERE o.type = 'U'
and c.name = 'AccountID'
and y.name = 'nvarchar'
order by TableName

我通过查找数据库中具有AccountID列的所有表,然后使用动态sql使用游标对每个表运行更新语句来实现此目的。 我遇到了问题,我认为我的问题会带来一些看法 必须有一种更优雅的方式来做到这一点 有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我会使用information_schema.tablesinformation_schema.columns

select t.table_schema, t.table_name
from information_schema.columns c join
     information_schema.tables t
     on c.table_name = t.table_name and c.table_schema = t.table_schema and
        t.Table_type = 'BASE TABLE';

答案 1 :(得分:0)

您不必加入Sys.ObjectsSys.types尝试此操作。

SELECT t.NAME AS table_name,
       c.NAME AS Column_Name
FROM   sys.tables T
       JOIN sys.columns C
         ON T.object_id = c.object_id
WHERE  t.type = 'u' And C.name = 'AccountID'