如何以编程方式创建列名/描述符
Posted
技术标签:
【中文标题】如何以编程方式创建列名/描述符【英文标题】: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 的定义相匹配 - 如果这些定义可以自动生成,将会变得更加轻松。
【问题讨论】:
【参考方案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 版本,请在这篇文章中添加评论,我会在此处发布。
【讨论】:
以上是关于如何以编程方式创建列名/描述符的主要内容,如果未能解决你的问题,请参考以下文章