Sql 如何从类型创建临时表?
假设我有一些类型:Sql 如何从类型创建临时表?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,假设我有一些类型: CREATE TYPE usr.NameList AS TABLE ([name] VARCHAR(MAX) NOT NULL); 现在我想基于这种类型创建一个临时表,我该怎么做 CREATE TABLE #superBrand (usr.NameList) -- doesn't work 还有,从这里: 演示如何使用表变量而不是#temp表。如果您确实想要基于已知表类型的#temp表(无需知道列名/定义),您可以说: DECLARE @d usr.NameList; S
CREATE TYPE usr.NameList AS TABLE ([name] VARCHAR(MAX) NOT NULL);
现在我想基于这种类型创建一个临时表,我该怎么做
CREATE TABLE #superBrand (usr.NameList) -- doesn't work
还有,从这里:
演示如何使用表变量而不是#temp表。如果您确实想要基于已知表类型的#temp表(无需知道列名/定义),您可以说:
DECLARE @d usr.NameList;
SELECT * INTO #superBrand FROM @d;
现在,#superBrand
应该匹配表类型的表结构,减去约束条件(以及从SQL Server 2014开始的非常有用的二级索引)
当然,随后填充#temp表的其余代码必须知道其结构。那么,声明与表类型具有相同结构的#temp表的目的到底是什么?您想要一个列也是表的temp表吗?@BrendanGreen我想要一个与类型使用相同结构的表。当您说它不起作用时,您看到了什么错误消息或输出?我使用类型作为过程的参数,并且我还想使用它来声明将要创建的一些表。它本质上是一种避免重新定义类型的快捷方式。有更好的方法吗?请注意,这种方法会导致重新编译,因为临时表不是静态声明的。这会导致静态代码分析失败。“ABC.PROC.SQL(11,9,11,9):StaticCodeAnalysis错误:SR0001:Microsoft.Rules.Data:如果基础表或视图结构发生更改,SELECT*语句生成的结果集的形状将发生更改。”@Koshimitsu So?你需要选择你想要的:基于表的“立即”版本创建具有结构的临时表的能力,或者通过所有静态代码分析。根据定义,你不可能两者兼得。我猜这个OP比后者更关心前者,但是如果你认为你可以提供一个完全满足这个问题的要求并通过静态代码分析的解决方案,那么无论如何,请给出一个答案。这会创建一个表变量而不是临时表
/****** 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)
DECLARE @d usr.NameList;
SELECT * INTO #superBrand FROM @d;