0

是否有标准方法来检索 SQL Server 中表的“CREATE TABLE..”定义?

我可以向 INFORMATION_SCHEMA 询问视图和函数/过程的定义,所以我认为为表获得相同的定义是很自然的,但我没有找到任何东西。

4

3 回答 3

3

是的 -INFORMATION_SCHEMA.TABLES应该是你要找的。

它会给你类似的东西:

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'

将为您提供指定表的列的所有详细信息。

于 2009-10-29T16:31:35.537 回答
1

对视图和代码使用 INFORMATION_SCHEMA 将失败。数据仅限于 nvarchar(4000),因此不会读取更长的内容。使用sys.sql_modulesOBJECT_DEFINITION

对于表,它更难。“表”由列、约束、索引、可能的规则、UDT 组成(我忘了什么吗?)。这就是为什么 SSMS 与视图或存储过程相比具有如此多的表脚本选项。

我建议分析 SSMS 并希望它不使用 SMO ...或通过 CLR 代码甚至 xp_cmdshell 使用 SMO。

于 2009-10-29T19:59:34.167 回答
0

您可以使用 .NET 中的 SMO (Microsoft.SqlServer.Smo) 为表编写脚本。

于 2009-10-29T16:31:58.803 回答