插入时使用'with'的IF语句

时间:2013-12-09 11:09:18

标签: sql sql-server logic conditional

我有以下查询:

;WITH tbldata as (
SELECT a, b FROM Some_Table
)
INSERT INTO Target_Table(column1, column2)
SELECT a,b FROM tbldata

我想使插入条件成为条件:

;WITH tbldata as (
SELECT a, b FROM Some_Table
)
IF @insert = 1
INSERT INTO Target_Table(column1, column2) SELECT a,b FROM tbldata
ELSE
SELECT a,b FROM tbldata

但我收到错误消息:Incorrect syntax near the keyword 'IF'.

我该如何解决这个问题?我一直在考虑的事情

;WITH tbldata as (
SELECT a, b FROM Some_Table
)
INSERT INTO TEMP_Table(column1, column2) SELECT a,b FROM tbldata 

--effectively dumping it in a temptable before deciding whether to insert or view it

IF @insert = 1
INSERT INTO Target_Table(column1, column2) SELECT a,b FROM TEMP_Table 
ELSE
SELECT a,b FROM tbldata

但不知怎的,对我来说看起来很“脏”。建议?还是我在监督s'thing?

我很想听听你的建议!

1 个答案:

答案 0 :(得分:2)

您需要的是本地定义的视图。不幸的是,SQL Server没有它们。 CTE只能属于一个查询,不能共享。这意味着您必须执行以下操作之一:

  1. 将CTE复制到IF的两个分支
  2. 定义视图
  3. 定义表值函数
  4. 将CTE的内容复制到临时表或表变量中以避免重复