我需要将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使用游标对每个表运行更新语句来实现此目的。 我遇到了问题,我认为我的问题会带来一些看法 必须有一种更优雅的方式来做到这一点 有什么建议吗?
答案 0 :(得分:1)
我会使用information_schema.tables
和information_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.Objects
和Sys.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'