2016-11-10 84 views
0

我想执行一个SQL查询来查找数据库中没有特定列的所有表?SQL Server - 在所有数据库表中搜索一列

E.g.我想要一个没有名为'BranchID'的列表。

感谢您的关注。

+4

提示:'INFORMATION_SCHEMA.COLUMNS'。 –

+0

我意识到我们正在处理表格和列,但每个有答案的人都使用了INFORMATION_SCHEMA视图。我必须同意Aaron Bertrand的看法,大多数时候,目录视图都是更好的选择。 http://sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/the-case-against-information-schema-views.aspx –

回答

3

信息模式视图包含有关数据库的元数据。欲了解更多信息,请here

使用这些观点,你可以做这样的事情......

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') 
0
select table_name 
from INFORMATION_SCHEMA.COLUMNS 
except 
select table_name 
from INFORMATION_SCHEMA.COLUMNS 
where column_name = 'BranchID' 

(从内存中,我可能有列名错了,但应该让你大部分的方式:))

0

这应该工作。

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列的查询

0

您可以使用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') 
0

我创建了一个可重复使用的程序,可以帮助你。

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 
相关问题