2013-12-09 79 views
0

我有以下查询:如果使用“与”上插入语句

;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 

但不知何故,看起来'脏'给我。建议?还是我监督着什么?

我很想听听你的建议!

+2

你的错误是因为这样的:一个CTE后面必须跟一个SELECT,INSERT,UPDATE或DELETE语句引用一些或所有的CTE列。 http://msdn.microsoft.com/en-us/library/ms175972.aspx – Ric

+0

我结束了使用内存可温度。肮脏,但伎俩。感谢您为我澄清这一点! – Henrov

回答

2

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

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

我将内容转储到一个可变温表中,并根据条件将它们从可温度表插入到最终表(或不是; p)中 – Henrov

+0

我最终使用了内存中的可修改表达式。肮脏,但伎俩。感谢您为我澄清这一点! – Henrov