访问数据库元数据

时间:2011-09-06 17:16:14

标签: sql sql-server database sql-server-2008 metadata

我遇到了一个棘手的问题。我有一个使用Microsoft SQL 2008的数据库,在这个数据库中有很多表。这些表是自动生成的,没有有意义的名称。我需要一个特定的表,我似乎无法找到它。

我知道调用表中一些列的名称是什么。有没有办法我可以一次查看所有表格,查看列的名称,看看它们是否与我所知道的相匹配。

如果他们这样做,那么我可以在桌子上看得更远,看看它是否是我正在寻找的那个。这听起来像是解决问题的好方法吗?可能吗?任何从哪里开始的想法?

3 个答案:

答案 0 :(得分:2)

SELECT OBJECT_SCHEMA_NAME([object_id]),
    OBJECT_NAME([object_id]) 
    FROM sys.columns 
    WHERE name IN ('column 1', 'column 2' 
    /* , ... other columns */);
根据请求

编辑,以防OP意在识别所有人与任何人:

SELECT OBJECT_SCHEMA_NAME([object_id), name 
FROM sys.tables AS t
WHERE EXISTS 
(
    SELECT 1 FROM sys.columns
    WHERE name = 'column 1'
    AND [object_id] = t.[object_id]
)
AND EXISTS 
(
    SELECT 1 FROM sys.columns
    WHERE name = 'column 2'
    AND [object_id] = t.[object_id]
)
/* ... repeat for other columns ... */

答案 1 :(得分:1)

使用Information_schema.columns而不是sys.columns替代Aaron的答案

SELECT Table_name
FROM 
      information_schema.columns
WHERE 
      column_name IN ('column 1', 'column 2')
GROUP BY Table_Name
Having COUNT(column_name) = 2

有关工作示例,请参阅此Data.SE query

答案 2 :(得分:0)

使用上面的脚本,您只能使用SQL wild-carding,这可能非常有限。您可以使用SchemaCrawler grep更强大地使用正则表达式搜索数据库。 SchemaCrawler还允许您使用其他功能来查找与外键相关的表,因此,例如,您可以说找到所有具有客户地址列的表以及引用这些表的表。 SchemaCrawler是一个与Microsoft SQL Server数据库驱动程序捆绑在一起的命令行工具。

Sualeh Fatehi,SchemaCrawler