【问题标题】:SQL Server: Search all tables for all rows with a specific value in a columnSQL Server:在所有表中搜索列中具有特定值的所有行
【发布时间】:2017-07-04 20:11:38
【问题描述】:

(我在 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;

我现在正在寻找的是对此的修改——有没有办法获取每个表中我的目标列名具有特定值的所有行?基本上,我希望能够遍历系统中的每个表并选择特定列名具有特定值的每一行。 (稍后我会尝试删除所有这些行,但首先是 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 中给我带来笨拙的输出。

有没有一种简单的方法来解决这个问题,而无需借助外部工具或其他工具?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    使用 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

    【讨论】:

    • 问题是,我已经可以获取所有包含该列的表。我需要在所有包含该列的表中具有特定值的所有行。
    • 那你需要动态查询:stackoverflow.com/a/591991/3270427
    猜你喜欢
    • 2010-12-20
    • 2016-10-26
    • 2010-11-01
    • 2018-03-17
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多