【发布时间】:2010-12-11 07:45:05
【问题描述】:
是否有标准方法来检索 SQL Server 中表的“CREATE TABLE..”定义?
我可以向 INFORMATION_SCHEMA 询问视图和函数/过程的定义,所以我认为对表进行相同的定义是很自然的,但我什么也没找到。
【问题讨论】:
标签: sql sql-server tsql create-table
是否有标准方法来检索 SQL Server 中表的“CREATE TABLE..”定义?
我可以向 INFORMATION_SCHEMA 询问视图和函数/过程的定义,所以我认为对表进行相同的定义是很自然的,但我什么也没找到。
【问题讨论】:
标签: sql sql-server tsql create-table
是的 - INFORMATION_SCHEMA.TABLES 应该是您正在寻找的。p>
它会给你类似的东西:
aspnetdb dbo aspnet_Paths BASE TABLE
aspnetdb dbo aspnet_PersonalizationAllUsers BASE TABLE
aspnetdb dbo aspnet_PersonalizationPerUser BASE TABLE
aspnetdb dbo vw_aspnet_WebPartState_Paths VIEW
aspnetdb dbo vw_aspnet_WebPartState_Shared VIEW
aspnetdb dbo vw_aspnet_WebPartState_User VIEW
aspnetdb dbo aspnet_Applications BASE TABLE
如果您想了解表格的列,请查看INFORMATION_SCHEMA.COLUMNS。
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'aspnet_Users'
将为您提供指定表的列的所有详细信息。
【讨论】:
您可以使用 .NET 中的 SMO (Microsoft.SqlServer.Smo) 为表格编写脚本。
【讨论】:
对视图和代码使用 INFORMATION_SCHEMA 将失败。数据仅限于 nvarchar(4000),因此不会读取更长的内容。使用sys.sql_modules 或OBJECT_DEFINITION。
对于表格,这更困难。 “表”由列、约束、索引、可能的规则、UDT 组成(我忘了什么吗?)。这就是为什么 SSMS 与视图或存储过程相比具有如此多的表脚本选项。
我建议分析 SSMS 并希望它不使用 SMO...或通过 CLR 代码甚至 xp_cmdshell 使用 SMO。
【讨论】: