我遇到了一个棘手的问题。我有一个使用Microsoft SQL 2008的数据库,在这个数据库中有许多表。这些表是自动生成的,没有有意义的名称。有一张表是我需要的,但是我好像找不到了。
我知道表中一些列的名称是什么。有没有办法我可以一次浏览所有的表,查看列的名称,看看它们是否与我知道的匹配。
如果有,那么我可以在表格中更深入地查看它,看看它是否是我正在寻找的那个。这听起来像是解决问题的好方法吗?有可能吗?你有从哪里开始的想法吗?
发布于 2011-09-07 01:18:14
SELECT OBJECT_SCHEMA_NAME([object_id]),
OBJECT_NAME([object_id])
FROM sys.columns
WHERE name IN ('column 1', 'column 2'
/* , ... other columns */);通过请求编辑,以防操作的目的是标识ALL而不是ANY:
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 ... */发布于 2011-09-07 01:21:45
用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
发布于 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
https://stackoverflow.com/questions/7323628
复制相似问题