繁体   English   中英

SQL Server-在所有数据库表中搜索列

[英]SQL Server - Search for a column across all database tables

我想执行SQL查询来查找数据库中没有特定列的所有表?

例如,我想要一个没有名为“ BranchID”的列的表列表。

感谢您的关注。

信息架构视图包含有关数据库的元数据。 有关更多信息,请转到此处

使用这些视图,您可以执行以下操作...

SELECT 
    t.TABLE_NAME
FROM 
    INFORMATION_SCHEMA.TABLES AS t
WHERE NOT EXISTS 
    (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS AS c WHERE c.TABLE_NAME = t.TABLE_NAME AND c.COLUMN_NAME = 'BranchID')
select table_name 
from INFORMATION_SCHEMA.COLUMNS
except 
select table_name
from INFORMATION_SCHEMA.COLUMNS
where column_name = 'BranchID'

(从内存来看,我可能输入的列名错误,但是应该可以使您获得最充分的了解:))

这应该工作。

    SELECT table_name
FROM INFORMATION_SCHEMA.columns c
WHERE NOT EXISTS (
        SELECT table_name
        FROM INFORMATION_SCHEMA.columns cc
        WHERE cc.table_name = c.table_name
            AND cc.column_name = 'Branch_id'
        )

首先,我们从Information_Schema.Columns中选择table_name,其中table_name不在选择带有Branch_ID列的表的查询中

您可以使用INFORMATION_SCHEMA.COLUMNS表和INFORMATION_SCHEMA.TABLES表使用常规SQL查询来获取所需的信息。

在您的情况下,您可以使用子查询:

select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME NOT IN (select TABLE_NAME from INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME='BranchID')

我创建了一个可重用的过程,可以为您提供帮助。

CREATE PROC SP_UTIL_findcolumns
  @SearchString As varchar(250) = NULL
AS 
BEGIN
SELECT 
    t.TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES AS t
WHERE NOT EXISTS 
    (SELECT TABLE_NAME 
     FROM INFORMATION_SCHEMA.COLUMNS AS c 
     WHERE c.TABLE_NAME = t.TABLE_NAME 
       AND c.COLUMN_NAME = @SearchString )
END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM