根据用户定义的类型创建SQL Server表

时间:2014-03-13 20:37:28

标签: sql sql-server create-table

我使用

创建了我定义的表格类型
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

5 个答案:

答案 0 :(得分:22)

--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

答案 1 :(得分:3)

它就像你的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

答案 2 :(得分:0)

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

创建proc NewT @x MyTableType readonly 如 从@x

中选择*

现在,您可以列出实例化表中调用存储过程的列。 Exec NewT

答案 3 :(得分:0)

不幸的是,除非在最新版本中进行了某些更改,否则在SQL Server或TSQL中无法实现

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

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

答案 4 :(得分:-1)

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

SELECT * INTO newtablename FROM oldtablename;