无法在WITH语句后删除表

时间:2016-09-19 11:30:40

标签: sql-server tsql

我有一个WITH语句,用于收集我想要的数据。我想要做的是能够从我的SELECTWITH的不同部分执行INSERT,这会导致目标表格。

以下是我的长查询的简化版本:

WITH Active AS (
    --SELECT 1
),
Inactive AS (
    --SELECT 2
),
Churn AS (
    --SELECT 3
)
--Drop destination table if exists
IF OBJECT_ID('DestinationTable', 'u') IS NOT NULL DROP TABLE DestinationTable;

SELECT Active.Name, Inactive.Name,Churn.Id
INTO DestinationTable
FROM Active a
JOIN Inactive i ON a.Id = i.Id
JOIN Churn c ON a.Id = c.Id;

Sql Server IF之后不允许直接使用WITH语句。我不想在IF之前移动WITH,因为很可能我的目的地表很长时间都是空的。

我的问题的简单版本:

如何从SELECT语句中将WITH写入另一个表?

2 个答案:

答案 0 :(得分:2)

因为必须使用声明结果后跟声明。 除了结果不允许之外的任何其他声明。

您可以在with语句

上面编写drop语句

答案 1 :(得分:2)

只需重新构建它:

--Drop destination table if exists
IF OBJECT_ID('DestinationTable', 'u') IS NOT NULL DROP TABLE DestinationTable

;WITH Active AS (
    --SELECT 1
),
Inactive AS (
    --SELECT 2
),
Churn AS (
    --SELECT 3
)

SELECT Active.Name, Inactive.Name,Churn.Id
INTO DestinationTable
FROM Active a
JOIN Inactive i ON a.Id = i.Id
JOIN Churn c ON a.Id = c.Id;

CTE的范围意味着它必须在声明后立即用于声明中。

否则,在替换目标表之前,需要一些其他临时区域来处理负载。