您最好在查询顶部创建#FinalTemp 作为显式临时表,然后替换您现有的填充方法,我假设它们如下所示:
SELECT * INTO #temp1 FROM ... /* Rest of Query */
与:
INSERT INTO #FinalTemp (Columns...)
SELECT * FROM ... /* Rest of Query */
然后您根本不必执行最后的联合步骤。或者,如果您确实需要 4 个单独的临时表(可能对每个临时表进行多步操作),请在查询开始时定义它们中的每一个,然后在执行联合时它们将全部存在.
现在,鉴于您已经说过只会填充一个(因此其他将是空的),这可能没有实际意义,但我总是倾向于使用 UNION ALL 来组合不相交的表格 - 除非您隐式依赖 @ 987654325@s 去重功能?
您可以使用与真实表相同的语法声明临时表:
CREATE TABLE #FinalTemp (
ColumnA int not null primary key,
ColumnB varchar(20) not null,
ColumnC decimal(19,5) null,
)
或者,正如您也提到的,您可以使用表变量而不是临时表:
declare @FinalTemp table (
ColumnA int not null primary key,
ColumnB varchar(20) not null,
ColumnC decimal(19,5) null,
)
主要的不同(就我而言)是表变量遵循与其他变量相同的范围规则 - 它们在调用的存储过程中不可用,并且它们在批次之间被清理。