是否存在一个系统存储过程,它列出了SQL Server 2000数据库中所有表的名称,并且每个表中列出了该表中所有列的名称?我想将此数据导出到文件中以供记录。
答案 0 :(得分: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 :(得分:1)
在SQL-Server 2005+中,您可以使用系统视图sys.columns和sys.tables
来执行此操作SELECT t.name TableName, c.name ColumnName
FROM sys.tables t
JOIN sys.columns c ON t.object_id=c.object_id
答案 2 :(得分:0)
您还可以查询INFORMATION_SCHEMA.COLUMNS
视图。
使用此视图也更安全。 Microsoft says this关于视图“如果在将来的版本中更改了系统表,则直接查询系统表可能无法提供准确的信息。这些视图提供了SQL Server元数据的内部系统表独立视图。信息模式视图允许即使对系统表进行了重大更改,应用程序也能正常工作。“