我想使用现有的表架构在我的存储过程中声明一个表变量。
我有一个表,比如TableA
,它有大约30列。
我想使用相同的列声明一个表变量,就像我们声明一个临时表一样。
例如, 我可以使用这样的模式声明一个临时表:
SELECT TOP 0 * INTO #Temp_TableA FROM TableA
我可以类似地声明一个表变量???
答案 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变量。