基于用户定义的类型创建SQL Server表

基于用户定义的类型创建SQL Server表,sql,sql-server,create-table,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 (Na

我已使用创建定义的表类型

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)
);
我想创建一个这种类型的表。从这个建议来看,我想尝试一下

CREATE TABLE dbo.MyNewTable AS dbo.MyTableType
在my SQL Server Express 2012中产生以下错误消息:

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


SQL Server Express不支持这一点吗?如果是这样,我是否可以用其他方式创建它,例如在sql server中使用
DECLARE

使用以下语法复制表

SELECT * INTO newtablename FROM oldtablename;

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

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

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

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

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

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


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

我不是说基于表创建表,而是基于表类型创建表。没有什么可供选择的。我当然希望有一个比“没有这样的事情”更好的答案——听起来这是一个非常直观的任务。但如果没有,我很乐意投票并接受……我敢肯定,没有创建用户定义类型甚至任何类型的表这样的功能。表是表类型的对象。sql server 2008中引入了这些用户定义的表类型,主要是为了帮助将表值传递给存储过程。这是这些用户定义表类型的主要用途。如果要向存储过程传递一个表以进行处理,这是一种方法。创建一个表类型。使您的过程接受该表类型的参数,这样您就可以将表作为参数传递给您的过程。这个答案如何?就算这是一项工作。。。我对你的答案也投了赞成票。这个答案和我的答案有什么不同?不管怎样,很高兴你找到了你想要的:)安静:)警告:这会让你走9码远,但DRI不包括在内(主键等)@Stan,我明白你的意思,这是有限制的。但是如果你在5码线上,9码就足够了。(我对非美式足球迷表示歉意,因为他们继续进行体育选秀。)我将尝试用这个来创建我已经有了类型的临时表格。应该减少一些代码重复。这解决了我的问题。。。但是我想直接创建(自定义类型的)表。可能吗?e、 g:创建表dbo.my_表自定义_类型回答得很好。我想补充一点——如果您想在另一个数据库(DB2)中创建表(从DB1中的UDT类型),那么应该修改“INTO”子句后面指定的表名,以指定相同的表名,即完全限定的表名。例如,“插入DB2.dbo.NewTableInDB2”。谢谢
--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