2

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

我需要知道 MICROSOFT 出现的所有地方的列名。

是否可以?

如果是,查询是什么?

提前致谢

4

2 回答 2

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
于 2013-06-10T07:26:45.997 回答
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;
于 2013-06-10T08:10:56.087 回答