是否有标准方法来检索 SQL Server 中表的“CREATE TABLE..”定义?
我可以向 INFORMATION_SCHEMA 询问视图和函数/过程的定义,所以我认为为表获得相同的定义是很自然的,但我没有找到任何东西。
是否有标准方法来检索 SQL Server 中表的“CREATE TABLE..”定义?
我可以向 INFORMATION_SCHEMA 询问视图和函数/过程的定义,所以我认为为表获得相同的定义是很自然的,但我没有找到任何东西。
是的 -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'
将为您提供指定表的列的所有详细信息。
对视图和代码使用 INFORMATION_SCHEMA 将失败。数据仅限于 nvarchar(4000),因此不会读取更长的内容。使用sys.sql_modules或OBJECT_DEFINITION。
对于表,它更难。“表”由列、约束、索引、可能的规则、UDT 组成(我忘了什么吗?)。这就是为什么 SSMS 与视图或存储过程相比具有如此多的表脚本选项。
我建议分析 SSMS 并希望它不使用 SMO ...或通过 CLR 代码甚至 xp_cmdshell 使用 SMO。
您可以使用 .NET 中的 SMO (Microsoft.SqlServer.Smo) 为表编写脚本。