SQL Query在整个数据库中查找列名

时间:2013-06-10 06:58:48

标签: sql-server-2008

我有一个列名,在我的数据库中包含几个表中的MICROSOFT。

我需要知道发生MICROSOFT的所有地方的列名。

有可能吗?

如果是,那么查询是什么?

先谢谢

2 个答案:

答案 0 :(得分:1)

因此,如果您正在使用SQL Server,那么您可以运行它来查找所有表中的所有列。

select
    'SELECT * FROM ' 
     + st.name + 
     ' WHERE ' + 
       sc.name + ' = ''MICROSOFT'' '
from sys.tables st join sys.columns sc on st.object_id = sc.object_id

通过使用此查询的输出,您可以为每个表中的每列创建SELECTS的所有可能组合的列表。

这只输出所有命令的列表,现在你必须执行它们。为了执行每个命令,您必须创建一个将遍历整个结果列表的游标。

您将使用游标围绕上一个SELECT语句来遍历每个查询并执行它。因此,代码就像这样

DECLARE @myCommand VARCHAR(1000)

DECLARE c CURSOR READ_ONLY FAST_FORWARD FOR
    select
        'SELECT * FROM ' 
         + st.name + 
         ' WHERE ' + 
           sc.name + ' = ''MICROSOFT'' '
    from sys.tables st join sys.columns sc on st.object_id = sc.object_id
OPEN c

FETCH NEXT FROM c INTO @myCommand
WHILE @@FETCH_STATUS = 0
    BEGIN
        sp_executesql @myCommand
    FETCH NEXT FROM c INTO @myCommand
    END

CLOSE c

DEALLOCATE c

答案 1 :(得分:0)

在SQL Server中,您可以使用以下查询为每个表获取一个SELECT,其中包含基于字符的所有列

SELECT [Cmd]
  FROM (
    SELECT 'SELECT ''' + tbl.name + ''' FROM [' + tbl.name + '] WHERE '
         + CAST((STUFF((SELECT '] LIKE ''%Microsoft%'' OR [' + tbl.name + '].[' + col.name FROM sys.columns col WHERE tbl.object_id = col.object_id AND col.collation_name IS NOT NULL FOR XML PATH('')), 1, 24, '')) AS VARCHAR(MAX))
         + '] LIKE ''%Microsoft%'';'
      FROM sys.tables tbl
     WHERE tbl.type = N'U'
     ) [SQ]([Cmd])
 WHERE [Cmd] IS NOT NULL;