我的数据库中有一个列名,其中包含多个表中的 MICROSOFT。
我需要知道 MICROSOFT 出现的所有地方的列名。
是否可以?
如果是,查询是什么?
提前致谢
我的数据库中有一个列名,其中包含多个表中的 MICROSOFT。
我需要知道 MICROSOFT 出现的所有地方的列名。
是否可以?
如果是,查询是什么?
提前致谢
因此,如果您使用的是 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
在 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;