使用Sql中的现有表架构声明表变量
我想使用现有表模式在存储过程中声明一个表变量使用Sql中的现有表架构声明表变量,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我想使用现有表模式在存储过程中声明一个表变量 我有一个表,比如说TableA,它大约有30列。 我想使用相同的列声明一个表变量,就像我们声明一个临时表一样 比如说,, 我可以使用以下模式声明一个临时表: SELECT TOP 0 * INTO #Temp_TableA FROM TableA 我可以同样地声明一个表变量吗?From: 不,表变量是一个顾名思义的变量,所以您需要先声明它,然后才能像所有其他T-SQL变量一样使用它,并且需要使用INSERT-in DECLARE @MyTable
我有一个表,比如说
TableA
,它大约有30列。
我想使用相同的列声明一个表变量,就像我们声明一个临时表一样
比如说,,
我可以使用以下模式声明一个临时表:
SELECT TOP 0 * INTO #Temp_TableA FROM TableA
我可以同样地声明一个表变量吗?From:不,表变量是一个顾名思义的变量,所以您需要先声明它,然后才能像所有其他T-SQL变量一样使用它,并且需要使用
INSERT-in
DECLARE @MyTable TABLE(
ID INT NOT NULL,
Data varchar(30) NOT NULL
);
INSERT INTO @MyTable
SELECT ID, data
From <table>
为此,您应使用CTE:
; with CTE as (SELECT TOP 0* FROM TableA)
SELECT * FROM CTE
唯一需要记住的是,CTE只能在初始化后的下一行中使用。例如,下面的方法不起作用-
; with CTE as (SELECT TOP 0* FROM TableA)
SELECT * FROM TableA
SELECT * FROM CTE
因为这里CTE将变得无效。首先声明一个表变量,该变量与表的模式相同,然后插入到威震天提到的语法中
如果您计划在存储过程中使用,那么请使用CTE,不要忘记提及;点燃CTE declareation并从表中插入CTE变量。为什么不适合临时表?另请参见
; with CTE as (SELECT TOP 0* FROM TableA)
SELECT * FROM TableA
SELECT * FROM CTE