SQL Server:在列中搜索具有特定值的所有行的所有表

时间:2017-02-15 22:59:02

标签: sql sql-server

(我在StackOverflow上看过其他一些关于此问题的文章 - 特别是thisthis,但它们似乎都是特定于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;

我现在正在寻找的是对此的修改 - 是否有办法获取每个表中我的目标列名称具有特定值的所有行?基本上,我希望能够翻阅系统中的每个表,并选择特定列名称具有特定值的每一行。 (我稍后会尝试删除所有这些行,但是先SELECTDELETE稍后删除。)

有些事情(我知道它不起作用;它仅用于说明目的):

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中给我提供了难以置信的输出。 / p>

有没有一种简单的方法可以解决这个问题,而无需借助外部工具或诸如此类的东西?

1 个答案:

答案 0 :(得分:0)

使用INFORMATION_SCHEMA目录。

SELECT TABLE_CATALOG, TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%SOME_TEXT%'
ORDER BY TABLE_CATALOG, TABLE_NAME, COLUMN_NAME

在此处查看:http://rextester.com/JPEZN41582