T-SQL,公共表表达式到临时表,然后从临时表中TRUNCATE和INSERT.合理的实践?



我有一个存储过程,它通过一系列cte构建一个结果集,然后该结果集通过管道传输到一个临时表中。

TRUNCATE为现有表,INSERT为临时表的结果集。

我通常只在查询端,而不是存储过程。只是想知道这是否是一个合理的方式来删除&重建表

IF OBJECT_ID('tempdb..#factTSPOrderGoals') IS NOT NULL  
DROP TABLE #factTSPOrderGoals;
....
<Bunch of CTEs>
...
SELECT * 
INTO #factTSPOrderGoals 
FROM CTE_Final
BEGIN TRANSACTION 
TRUNCATE TABLE dbo.factTSPOrderGoals
INSERT INTO dbo.factTSPOrderGoals 
SELECT * 
FROM #factTSPOrderGoals 
COMMIT TRANSACTION;

任何SQL命令清除所有cte -因此写入临时表的中间步骤。感觉既干净又干净;有点奇怪,我很好奇这到底有多"合理"。

更好的主意是@SeanLange -只是TRUNCATE第一个

BEGIN TRANSACTION
TRUNCATE TABLE dbo.factTSPOrderGoals;
...
<Bunch of CTEs>
....
INSERT INTO dbo.factTSPOrderGoals SELECT * FROM CTE_Final
COMMIT TRANSACTION;

因此不需要临时表。

最新更新