[英]SQL Server: Search all tables for all rows with a specific value in a column
[英]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.