sql-server - T-SQL,Common Table Expression 到临时 table,然后是 TRUNCATE,然后从临时 table 插入。合理的做法?

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

然后它 TRUNCATE 是现有的 table,并且 INSERT 是来自临时 table 的结果集。

我通常只在查询方面,而不是存储过程。只是想知道这是否是删除和重建 table 的合理方法。

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 - 因此是写入临时 table 的中间步骤。感觉既干净又有点笨拙,所以很好奇这通常是多么“合理”。

回答1

每个@SeanLange 更好的主意 - 只是 TRUNCATE 首先

BEGIN TRANSACTION

TRUNCATE TABLE dbo.factTSPOrderGoals;

...
<Bunch of CTEs>
....

INSERT INTO dbo.factTSPOrderGoals SELECT * FROM CTE_Final

COMMIT TRANSACTION;

因此不需要临时table。

相似文章

最新文章