(我在StackOverflow上看到过其他几篇关于此问题的文章--特别是this和this,但它们似乎都是Oracle特有的,而且我使用的是SQL Server。)
所以我使用this post来获取所有包含特定列的表。这部分工作得很好,它返回了100多个表。这就是我在那篇文章中使用的方法:
SELECT c.name AS 'ColumnName'
,t.name AS 'TableName'
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE 'myColumn'
ORDER BY TableName
,ColumnName;
我现在需要的是对它的修改--是否有一种方法可以获取目标列名具有特定值的每个表中的所有行?基本上,我希望能够遍历系统中的每个表,并选择特定列名具有特定值的每一行。(我稍后会尝试删除所有这些行,但先删除SELECT
,再删除DELETE
。)
一些沿着的东西(我知道这是行不通的;这是为了说明的目的):
SELECT [row]
FROM sys.tables tab
JOIN sys.columns col ON col.object_id = tab.object_id
WHERE col.name LIKE 'myColumn' AND col.value = 'myVal'
我能想到的唯一其他选项是获取第一个查询的输出,并对每个查询运行SELECT
,至少可以说,这会在SQL Server Management Studio中给予笨拙的输出。
有没有一种简单的方法来实现这一点,而不诉诸外部工具或诸如此类的东西?
2条答案
按热度按时间z9ju0rcb1#
使用INFORMATION_SCHEMA目录。
请在此处查看:http://rextester.com/JPEZN41582
6yjfywim2#
下面是我用来查找包含特定列名的特定值的所有表的内容