【问题标题】:Creating tables with something similar to INFORMATION_SCHEMA.VIEW_DEFINITION in SQL Server在 SQL Server 中创建类似于 INFORMATION_SCHEMA.VIEW_DEFINITION 的表
【发布时间】:2010-12-11 07:45:05
【问题描述】:

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

我可以向 INFORMATION_SCHEMA 询问视图和函数/过程的定义,所以我认为对表进行相同的定义是很自然的,但我什么也没找到。

【问题讨论】:

    标签: sql sql-server tsql create-table


    【解决方案1】:

    是的 - 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'
    

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

    【讨论】:

    • 我知道我可以在这些表中找到所有信息,但我一直在寻找一种自动方法来检索完整的创建脚本,包括表的所有约束,就像我在在 MSSQL Management Studio 中工作。
    • 我认为您无法在任何系统目录视图的任何位置“找到”完整的创建脚本。如果你想要一个完整的脚本,你需要使用 SMO,正如 Nestor 建议的那样——它有一个功能可以编写出任何类型的数据库对象——它可能只是检查那些系统目录视图并将信息连接到一个完整的创建脚本中。
    【解决方案2】:

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

    【讨论】:

    • 哦,我明白了.. 抱歉,我不明白你的问题。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2017-10-28
      • 2013-01-27
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      相关资源
      最近更新 更多