首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问数据库元数据

访问数据库元数据
EN

Stack Overflow用户
提问于 2011-09-07 01:16:14
回答 3查看 112关注 0票数 1

我遇到了一个棘手的问题。我有一个使用Microsoft SQL 2008的数据库,在这个数据库中有许多表。这些表是自动生成的,没有有意义的名称。有一张表是我需要的,但是我好像找不到了。

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

如果有,那么我可以在表格中更深入地查看它,看看它是否是我正在寻找的那个。这听起来像是解决问题的好方法吗?有可能吗?你有从哪里开始的想法吗?

EN

回答 3

Stack Overflow用户

发布于 2011-09-07 01:18:14

代码语言:javascript
复制
SELECT OBJECT_SCHEMA_NAME([object_id]),
    OBJECT_NAME([object_id]) 
    FROM sys.columns 
    WHERE name IN ('column 1', 'column 2' 
    /* , ... other columns */);

通过请求编辑,以防操作的目的是标识ALL而不是ANY:

代码语言:javascript
复制
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 ... */
票数 2
EN

Stack Overflow用户

发布于 2011-09-07 01:21:45

用Information_schema.columns代替sys.columns代替Aaron的回答

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2012-12-15 01:00:01

使用上面的脚本,您只能使用SQL通配符,而SQL通配符可能非常有限。可以使用SchemaCrawler grep通过正则表达式在数据库中进行更强大的搜索。SchemaCrawler还允许您使用额外的功能来查找与外键相关的表,例如,您可以说find me all tables that with a customer address列,以及引用这些表的表。SchemaCrawler是与Microsoft SQL Server数据库驱动程序捆绑在一起的命令行工具。

苏阿利赫·法塔希,SchemaCrawler

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7323628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档