我有一个WITH
语句,用于收集我想要的数据。我想要做的是能够从我的SELECT
和WITH
的不同部分执行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
写入另一个表?
答案 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的范围意味着它必须在声明后立即用于声明中。
否则,在替换目标表之前,需要一些其他临时区域来处理负载。