假设我有一些类型:
CREATE TYPE usr.NameList AS TABLE ([name] VARCHAR(MAX) NOT NULL);
现在我想基于这种类型创建一个临时表,我该怎么办?
CREATE TABLE #superBrand (usr.NameList) -- doesn't work
此外,由此:create table based on a user defined type:
CREATE TABLE #superBrand OF usr.NameList -- doesn't work
答案 0 :(得分:14)
Pure.Krome's answer显示了如何使用表变量而不是#temp表。如果你真的想要一个基于已知表类型的#temp表(不必知道列名/定义),你可以说:
DECLARE @d usr.NameList;
SELECT * INTO #superBrand FROM @d;
现在,#superBrand
应该匹配表类型的表结构,减去约束(以及从SQL Server 2014开始的边际有用的二级索引)。
当然,然后填充#temp表的其余代码必须知道结构。那么,声明一个与表类型具有相同结构的#temp表的目的究竟是什么呢?
答案 1 :(得分:0)
/****** Object: UserDefinedTableType [dbo].[IdentityType] ******/
CREATE TYPE [dbo].[IdentityType] AS TABLE(
[Id] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO
DECLARE @IdTable [dbo].[IdentityType]
INSERT INTO @IdTable VALUES(1)