检索SQL Server数据库中所有表的名称列

3

是否存在一个系统存储过程,可以列出SQL Server 2000数据库中所有表的名称以及每个表中所有列的名称?我想将这些数据导出到文件进行文档记录。

3个回答

6

我不知道是否存在系统存储过程,但我使用以下方法:

SELECT   SysObjects.[Name] as TableName,   
    SysColumns.[Name] as ColumnName,   
    SysTypes.[Name] As DataType,   
    SysColumns.[Length] As Length   
FROM   
    SysObjects INNER JOIN SysColumns   
ON SysObjects.[Id] = SysColumns.[Id]   
    INNER JOIN SysTypes  
ON SysTypes.[xtype] = SysColumns.[xtype]  
WHERE  SysObjects.[type] = 'U'  
ORDER BY  SysObjects.[Name]

1
在 SQL-Server 2005+ 中,您可以使用系统视图 sys.columnssys.tables 来完成此操作。
SELECT t.name TableName, c.name ColumnName
FROM sys.tables t
     JOIN sys.columns c ON t.object_id=c.object_id

谢谢。但是我想这对于 SQL Server 2000 版本不起作用,因为我收到了一个错误信息:“无效的对象名称 'sys.tables'”。我正在使用 2000 版本,抱歉,我应该在问题中提到这一点(已更新我的问题)。 - waanders

0

您还可以查询INFORMATION_SCHEMA.COLUMNS视图。

使用此视图也更安全。Microsoft对该视图表示:“直接查询系统表可能不会提供准确的信息,如果在将来的版本中更改了系统表,则信息可能会失效。这些视图提供了SQL Server元数据的内部、独立于系统表的视图。信息模式视图允许应用程序正常工作,即使对系统表进行了重大更改。”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接