我使用
创建了我定义的表格类型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
?
答案 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;