Sql 如何在不同的数据库中查找表列?

Sql 如何在不同的数据库中查找表列?,sql,sql-server,Sql,Sql Server,我试图在不同的表和不同的数据库中查找表列 到目前为止,我确实有一个查询来完成这项工作,但它并没有告诉我该列和表位于哪个数据库中 当前代码: SELECT sys.columns.name AS ColumnName, tables.name AS TableName FROM sys.columns JOIN sys.tables ON sys.columns.object_id = tables.object_id WHERE sys.columns

我试图在不同的表和不同的数据库中查找表列

到目前为止,我确实有一个查询来完成这项工作,但它并没有告诉我该列和表位于哪个数据库中

当前代码:

SELECT
    sys.columns.name AS ColumnName,
    tables.name AS TableName
FROM
    sys.columns
JOIN 
    sys.tables ON sys.columns.object_id = tables.object_id
WHERE 
    sys.columns.name LIKE '%COLUMNNAME%'

有人知道我需要添加什么来显示数据库名称吗?

我建议使用
信息\u模式。表
如下:

SELECT table_name, table_schema, table_catalog 
from INFORMATION_SCHEMA.tables 
where Table_name like '%<table>%'

“但是,它没有告诉我列和表位于哪个数据库中”,该查询是在当前数据库的上下文中运行的;所以它是您当前连接到的任何数据库。它不会告诉您任何其他数据库中列/表的详细信息,只会告诉您当前数据库。如果您记不起连接到哪个数据库,请使用
DB\u NAME()
。谢谢!很高兴知道。可能是某些表格被隐藏了吗?我只有读取权限,即使上面的代码告诉我我要查找的密钥在表X中,我在对象资源管理器中找不到该表。可能该表是在您连接到服务器后创建的,并且您没有刷新对象资源管理器?我想不会是这种情况。我是一个普通的SQL用户,我只是为一些分析用途构建查询。我不负责构建服务器等…所以,如果你不负责对象,那么这难道不意味着在你连接后可能存在一个你不知道的对象吗?如果查询告诉您那里有一个对象,那么您将能够在对象资源管理器中看到它,因为它在您第一次连接时从
sys
对象中获取对象列表。也许是在一个不同的模式,你在错误的地方寻找;但是没有刷新对象Exp[在我看来,lorer是最有可能的候选人。不过我只能猜测;我看不出你在做什么。这里要小心。这些视图充其量有点粗略,它们是为了向后兼容。列表模式不准确,MS甚至在文档中声明了这一点。谢谢,我尝试了你的查询,但我似乎仍然找不到尽管该表告诉我数据库:/@SeanLange我同意,但它有复杂的数据库。DB_Name()也很好
选择DB_Name(database_id)作为[database],database_id来自sys.databases
。只是提供其他数据库的备选答案@HansDampf我编辑了我的文章。如果你正在尝试列,请尝试底部版本。它将显示列、表、目录等。
SELECT column_name, table_schema, table_catalog, * 
from INFORMATION_SCHEMA.COLUMNS where column_name like '%<Column>%'