【问题标题】:create SQL Server table based on a user defined type根据用户定义的类型创建 SQL Server 表
【发布时间】:2014-04-18 21:07:14
【问题描述】:

我有我定义的表类型创建与

CREATE TYPE dbo.MyTableType AS TABLE
(
    Name      varchar(10) NOT NULL,
    ValueDate date        NOT NULL,
    TenorSize smallint    NOT NULL,
    TenorUnit char(1)     NOT NULL,
    Rate      float       NOT NULL
    PRIMARY KEY (Name, ValueDate, TenorSize, TenorUnit)
);

我想创建一个这种类型的表。来自this answer 的建议是尝试

CREATE TABLE dbo.MyNewTable AS dbo.MyTableType

在我的 SQL Server Express 2012 中产生了以下错误消息:

关键字“OF”附近的语法不正确。

SQL Server Express 不支持吗?如果是这样,我可以通过其他方式创建它吗,例如使用DECLARE

【问题讨论】:

    标签: sql sql-server create-table


    【解决方案1】:

    很遗憾,这在 SQL Server 或 TSQL 中是不可能的,除非在最新版本中有所更改。

    如果微软添加它,这将是一个非常有用的功能。 (提示提示,微软)

    您可以做的最好的事情是创建一个与用户定义的表类型具有相同结构的表,这是公认的答案所做的,但这并不是您所要求的,因为整点用户定义的表类型是能够控制定义并随时更改它。

    【讨论】:

      【解决方案2】:

      表格类型是一个模板。您需要使用此对象来创建表。只读是您唯一的选择。

      创建过程 NewT @x MyTableType 只读 作为 从@x中选择*

      现在您可以列出实例化表中调用存储过程的列。 执行新T

      【讨论】:

        【解决方案3】:
        --Create table variable from type.
        DECLARE @Table AS dbo.MyTableType
        
        --Create new permanent/physical table by selecting into from the temp table.
        SELECT *
        INTO dbo.NewTable
        FROM @Table
        WHERE 1 = 2
        
        --Verify table exists and review structure.
        SELECT *
        FROM dbo.NewTable
        

        【讨论】:

        • 警告:这会让你 9 码,但不包括 DRI(主键等)
        • @Stan,我明白你在说什么,有限制。但如果你在 5 码线上,9 码就足够了。 (我向非美式足球爱好者道歉,因为我继续进行体育类比。)我将尝试使用它来创建我已经有类型的临时表。应该减少一些代码重复。
        • 这解决了我的问题......但我想直接创建表(自定义类型)。那可能吗?例如:创建表 dbo.my_table custom_type
        • 很好的答案。我想补充一点 - 如果您想在另一个数据库 (DB2) 中创建表(从 DB1 中的 UDT 类型),那么应该修改“INTO”子句之后指定的表名以指定相同的名称,即完全合格的。例如。 “进入 DB2.dbo.NewTableInDB2”。谢谢。
        【解决方案4】:

        它就像你的 sql server 中的另一个日期类型。创建用户定义类型的表在 sql server 中没有这样的事情。您可以做的是声明此类型的变量并填充它,但您无法创建此类型的表。

        这样的……

        /* Declare a variable of this type */
        
        DECLARE @My_Table_Var AS dbo.MyTableType;
        
        /* Populate the table with data */
        
        INSERT INTO @My_Table_Var 
        SELECT Col1, Col2, Col3 ,.....
        FROM Source_Table
        

        【讨论】:

        • 我当然希望有一个比“没有这样的事情”更好的答案 - 听起来像是一项非常直观的任务。但如果不是,我会很乐意支持并接受...
        • 我非常确定没有创建用户定义类型甚至任何类型的表这样的功能。表是表类型的对象。这些用户定义的表类型是在 sql server 2008 中引入的,主要是为了帮助将表值传递给存储过程。这是这些用户定义的表类型的主要用途。如果你想传递一个存储过程一个表来处理,这是要走的路。创建表类型。使您的过程接受该表类型的参数,这样您就可以将表作为参数传递给您的过程。
        • 这个答案stackoverflow.com/a/22390997/399573怎么样?当然这是一种解决方法......我也赞成你的。
        • 这个答案和我的答案有什么不同?
        • 无论如何,很高兴你找到了你要找的东西 :) 和平 :)
        【解决方案5】:

        IN sql server 使用如下语法复制表

        SELECT * INTO newtablename FROM oldtablename;
        

        【讨论】:

        • 我说的不是基于table创建表,而是基于table type创建表。没有什么可以选择的。
        猜你喜欢
        • 2011-01-26
        • 2017-08-19
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-07
        相关资源
        最近更新 更多