【问题标题】:How to find in all the tables containing columns having particular values?如何在所有包含具有特定值的列的表中查找?
【发布时间】:2011-12-09 09:25:03
【问题描述】:

我的目标是从数据库中找到所有具有特定值的给定列的表。 IE。 我有 Table1、Table2、Table3、Table4、Table5、Table6、Table7 等表格。

在这些表中,一些表的列名称为“NameID”。现在我想找出列名为“NameID”且值为 100 的表。

谁能告诉我如何为此编写 SQL 查询?

【问题讨论】:

    标签: sql database sql-server-2008


    【解决方案1】:

    是的,您可以使用 INFORMATION_SCHEMA,它允许 MS SQL 进行自我描述。

    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'NameID'
    

    【讨论】:

    • 是的,但我希望表的“NameID”列的值为 100。
    【解决方案2】:

    如果您无法列出表格,我怀疑您是否可以在查询中完成。您需要动态创建一个查询(使用您找到的表,如 Paul Alan Taylor 所示)。

    尝试调整这个:

    http://ubercode.bleakllc.com/2008/11/find-any-value-in-any-database-column.html

    如果您已经知道包含该列的所有表,并且该表列表不会更改,那么您可以执行一个简单的查询,例如

      Select 'Table1' from table1 where id = 100
      UNION
      Select 'Table2' from table2 where id = 100
      UNION
      ...
    

    UNION 会丢弃所有的欺骗,所以如果多行的 id 为 100,那么如果这不是你想要的 UNION ALL,你只会列出一次表。

    【讨论】:

    • 如果你只想要你可能想做的表名 Select top 1 'Table1' from table1 where id = 100 union ...
    【解决方案3】:

    需要做类似的事情,对我们来说是 TransactionID。我接受了 Paul Alan Taylor 和 MakeMinePanacea 的建议并添加了一个光标。它又快又脏,但可以打 1 折。

    DECLARE @TableName varchar(MAX)
    DECLARE @Sql VARCHAR(MAX)
    set @Sql = ''
    DECLARE @Tables CURSOR
    
    SET @Tables = CURSOR FOR
    
        SELECT t.Table_Name
        FROM INFORMATION_SCHEMA.COLUMNS c
        JOIN INFORMATION_SCHEMA.TABLES t on c.Table_Name = t.Table_Name
        WHERE COLUMN_NAME = 'TransactionID' and table_type = 'BASE TABLE'
    
    OPEN @Tables
    FETCH NEXT
    FROM @Tables INTO @TableName
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
        if len(@Sql) > 0
        BEGIN
            set @SQL = @SQL + ' UNION ALL '
        END
    
        set @Sql = @Sql + 'SELECT ''' + @TableName + ''' FROM [' + @TableName + '] WHERE transactionid = 100'
    
        FETCH NEXT
        FROM @Tables INTO @TableName
    END
    CLOSE @Tables
    DEALLOCATE @Tables
    
    exec (@Sql)
    

    【讨论】:

      【解决方案4】:

      您可以将我的搜索脚本与以下参数一起使用:

      SET @SearchStrColumnValue = '100' /* use LIKE syntax */
      SET @FullRowResult = 1
      SET @SearchStrTableName = 'TABLE%' /* NULL for all tables, uses LIKE syntax */
      SET @SearchStrColumnName = 'NameID' /* NULL for all columns, uses LIKE syntax */
      SET @SearchStrInXML = 0 /* Searching XML data may be slow */
      

      http://fullparam.wordpress.com/2012/09/07/fck-it-i-am-going-to-search-all-tables-all-collumns/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-31
        • 2018-08-10
        • 2013-02-10
        • 2015-11-04
        • 2011-06-18
        • 2013-09-01
        • 2018-08-05
        相关资源
        最近更新 更多