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

25
我已经创建了一个自定义的表类型,使用以下代码:
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

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

'OF' 关键字附近语法不正确。

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

5个回答

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

3
警告:这可以让你得到9码,但DRI不包括(主键等)。 - Stan
@Stan,我明白你的意思,确实有限制。但如果你在五码线上,九码足够了。(对于不喜欢美式足球的人,我很抱歉继续使用这个体育类比。)我将尝试使用它来创建我已经拥有类型的临时表。应该可以减少代码重复。 - jimhark
这解决了我的问题...但我想直接创建自定义类型的表格。这可行吗?例如:create table dbo.my_table custom_type - ColinMac
很好的回答。我想补充一点 - 如果你想在另一个数据库(DB2)中创建表(从DB1中的UDT类型),那么在“INTO”子句之后指定的表名应该被修改为指定相同的完全限定名。例如,“INTO DB2.dbo.NewTableInDB2”。谢谢。 - Nabakamal Das

5

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

1
我真的希望有比“这种东西不存在”的更好的答案——听起来是一个非常直观的任务。但如果没有,我将很高兴投票并接受... - gt6989b
这个答案怎么样?https://dev59.com/o2Eh5IYBdhLWcg3wdjPt#22390997?虽然只是一个变通方法...我也会给你点赞的。 - gt6989b
这个答案和我的答案有什么不同? - M.Ali
无论如何,我并不是说你是错的,我立即提到这是一个解决方法,但它仍然可以完成我需要做的事情。 - gt6989b
1
无论如何,很高兴你找到了你想要的东西 :) 祝你平安 :) - M.Ali
显示剩余4条评论

0

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

创建过程NewT @x MyTableType readonly as 从@x中选择*

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


0

很遗憾,在SQL Server或TSQL中,除非在最新版本中有所改变,否则不可能实现这一点。

如果微软能够添加这个功能,那将是非常有用的。(暗示微软)

你能做的最好的事情就是创建一个与用户定义表类型相同结构的表,这就是被接受的答案所做的,但这并不完全是你要求的,因为用户定义表类型的整个目的就是能够控制定义并随时更改它。


-2

在 SQL Server 中使用以下语法来复制表格

SELECT * INTO newtablename FROM oldtablename;

2
我不是在谈论基于“表格”的创建表格,而是基于“表格类型”的创建表格。没有什么可供选择的。 - gt6989b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接