我有一个WITH
语句收集我想要的数据。我想要做的是能够从我的WITH
和INSERT
的不同部分执行SELECT
,从而生成目标表。WITH语句后无法删除表格
这里是我长的查询的简化版本:
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的不直接在WITH
后允许IF
声明。我不想在我的WITH
之前移动IF
,因为那样我的目的地表很可能会长时间为空。
简单的版本,我的问题的:
我怎么能写从WITH
语句转换成另一个表SELECT
?
为什么不截断你的DestinationTable而不是删除它并重新创建它?会更简单,资源更少。 –
这听起来像你正试图维护长期查询中“最近”的缓存结果以供其他地方使用。您可以在“DestinationTable”中添加一列以记录每次运行“长查询”时增加的序列号。完成后,删除所有具有较低序列号的行。使用数据的代码应该始终可以访问由一个通用序列号标识的一个完整集。 (请注意您的应用程序需要的交易。) – HABO