在Sql中使用现有表模式声明表变量

7
我想在我的存储过程中使用现有表模式声明一个表变量。
我有一个名为TableA的表,它有大约30个列。我想声明一个表变量,使用与声明临时表相同的列。
例如,我可以像这样使用模式声明一个临时表:
SELECT TOP 0 * INTO #Temp_TableA FROM TableA

我可以同样声明一个表变量吗?

为什么不适合使用临时表? - Roman Marusyk
请参见https://dev59.com/2Wsz5IYBdhLWcg3wVGAy。 - Jarrod Dixon
3个回答

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

0

首先声明一个表变量,其模式与您的表相同,然后按照Megatron所述的INSERT INTO语法进行插入。

如果您计划在存储过程中使用,则使用CTE,并在CTE声明之前加上分号,并从您的表中插入到CTE变量中。


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将变得无效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接