【问题标题】:How to create column names/descriptors programmatically如何以编程方式创建列名/描述符
【发布时间】:2008-10-29 04:01:33
【问题描述】:

在 SQL Server 中,给定一个表/视图,如何在表单中生成表/视图的定义:

C1 整数,
C2 varchar(20),
C3双

执行此操作所需的信息包含在 SQL Server 的元表中,但是否有标准脚本/IDE 工具可以以上述形式输出其中包含的数据?

出于好奇,我想要这个,因为我必须维护一些包含 Table 对象的 SP(这是 SQL Server 使用的一种临时表)。 Table 对象需要与数据库中已有的 Tables 或 Views 的定义相匹配 - 如果这些定义可以自动生成,将会变得更加轻松。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    这是一个列出表中列的名称和类型的示例:

    select 
        COLUMN_NAME, 
        COLUMN_DEFAULT, 
        IS_NULLABLE, 
        DATA_TYPE, 
        CHARACTER_MAXIMUM_LENGTH, 
        NUMERIC_PRECISION, 
        NUMERIC_SCALE
    from 
        INFORMATION_SCHEMA.COLUMNS
    where 
        TABLE_NAME = 'YOUR_TABLE_NAME_HERE' 
    order by 
        Ordinal_Position
    

    从这些信息生成 DDL 更加困难。 SQLTeam似乎有一些建议

    【讨论】:

      【解决方案2】:

      如果你想复制一个表定义,你可以使用:

      select top 0
        *
      into
        newtable
      from
        mytable
      

      编辑:对不起,只是重新阅读您的问题,并意识到这可能无法回答。您能否明确您的目标是什么,您想要一个完全复制的表定义,还是一个包含有关表定义信息的表?

      【讨论】:

        【解决方案3】:

        感谢您的回复。是的,我确实想要 DDL 的精确副本,但我意识到我错误地陈述了我需要的内容。它是 DDL,它将创建一个与视图的列匹配的临时表。

        我在查看 Duckworths 的建议时意识到了这一点 - 这很好,但不幸的是没有涵盖视图的情况。

        从以下位置选择视图定义 INFORMATIONSCHEMA.VIEWS

        ... 将为您提供视图中的列列表,并且(假设视图中的所有列都直接从表中派生)然后应该可以使用 Duckworths 建议的修订版本将相关的动态链接库。

        我很惊讶这并不容易!我期待有人告诉我,鉴于 TABLE 对象需要完全定义所有列(而不是 Oracle 这样做的方式,也就是说 - “给我一些看起来像表 X ”。

        无论如何,再次感谢您的帮助,欢迎提出任何进一步的建议。

        【讨论】:

        • 内联编辑器吃了下划线 - 因此在上面的块引用中出现奇怪的列/视图名称
        【解决方案4】:

        this posting 的另一个问题中,我有一个数据库逆向工程脚本,它将执行表、视图、PK、UK 和索引定义以及外键。这个是针对 SQL Server 2005 的,是我最初为 SQL Server 2000 编写的一个端口。如果您需要 SQL Server 2000 版本,请在这篇文章中添加评论,我会在此处发布。

        【讨论】:

          猜你喜欢
          • 2013-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-05
          • 2019-03-25
          • 1970-01-01
          • 1970-01-01
          • 2015-04-09
          相关资源
          最近更新 更多