在多部分标识符中查找表名称

时间:2011-07-11 15:56:16

标签: sql sql-server sql-server-2008

我正在尝试从(SQL Server 2008)数据库中选择各种表名和列名。数据库相当大。有几个数据库位于同一台服务器上,每个数据库都有各种模式等。一旦涉及到多部分标识符,我就会陷入困境。例如,要检索数据库下的表列表,这可以正常工作:

SELECT [name]
FROM DatabaseOne.sys.tables
ORDER BY [name]

然后我想在某个架构下获取表格。 E.g:

SELECT [name]
FROM DatabaseOne.SchemaOne.sys.tables
ORDER BY [name]

但我收到错误:

  

无法在sys.servers中找到服务器“DatabaseOne”。验证   指定了正确的服务器名称。如有必要,执行   存储过程sp_addlinkedserver将服务器添加到sys.servers。

问题的很大一部分可能在于我对模式一无所知(如果这甚至是它们的话)。

另外,如果我想在表中找到列名,比如说DatabaseOne.SchemaOne.TableOne,我该怎么做呢?

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

如果使用四部分名称,则SQL假设第一部分是链接服务器的名称。

系统表位于sys架构中,包含所有其他架构的数据,如dbo或其他任何架构。

sys.tables中有一个schema_id值,用于指定每个表所在的模式。还有一个sys.schemas表,其中包含模式。

如果您知道架构名称,则可以执行

SELECT [name]
FROM DatabaseOne.sys.tables t
INNER JOIN sys.schemas s
    ON s.schema_id = t.schema_id
WHERE s.name = 'MySchema'
ORDER BY [name]

您还可以通过s.name评估IN评估来检查多个模式。