2013-12-09 93 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