我有一个列名,在我的数据库中包含几个表中的MICROSOFT。
我需要知道发生MICROSOFT的所有地方的列名。
有可能吗?
如果是,那么查询是什么?
先谢谢
答案 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;