在Sql

时间:2015-08-17 09:35:41

标签: sql sql-server sql-server-2008

我想使用现有的表架构在我的存储过程中声明一个表变量。

我有一个表,比如TableA,它有大约30列。 我想使用相同的列声明一个表变量,就像我们声明一个临时表一样。

例如, 我可以使用这样的模式声明一个临时表:

SELECT TOP 0 * INTO #Temp_TableA FROM TableA

我可以类似地声明一个表变量???

3 个答案:

答案 0 :(得分:1)

来自MSDN
不,表变量是一个名称建议的变量,因此您需要在使用它之前声明它,就像所有其他T-SQL变量一样,您需要使用INSERT INTO

DECLARE @MyTable TABLE(
ID INT NOT NULL,
Data varchar(30) NOT NULL
);
INSERT INTO @MyTable
SELECT ID, data
From <table>

您还可以在存储过程中使用临时表。只需在存储过程的开头添加此代码:

if object_id('tempdb..#TableA') is not null drop table #TableA

答案 1 :(得分:0)

您应该为此目的使用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将无效。

答案 2 :(得分:0)

DECLARE表变量首先与表的SCHEMA相同,然后按照Megatron提到的INSERT INTO语法。

如果您打算在存储过程中使用,请使用CTE,不要忘记提及; befire CTE声明并从您的表中插入CTE变量。