2014-09-19 35 views
0

這個問題建立在我的previous question on conditional inserts上。我現在想解決的問題是當我使用相同的LAST_INSERT_ID(其設置爲@EVENT_ID)插入多個VALUES時。我以前的C#腳本是這樣的語句應該是這樣的:有多個值的條件插入

INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE) 
VALUES (@EVENT_ID, 'SBEPN', '41420F'), (@EVENT_ID, 'Notes', 'Sent to USER2'); 

使用修改,以利用鏈接的問題提供了條件插入相同的C#腳本,這是我結束了(如果有隻是一個單一的一套VALUES它按預期工作):

INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE) 
SELECT t.* FROM ( 
    SELECT @EVENT_ID, 'SBEPN', '41420F', @EVENT_ID, 'Notes', 'Sent to USER2') 
t 
WHERE @EVENT_ID IS NOT NULL; 

問題: 運行本作,是得到一個「錯誤代碼1241操作數應包含1列(S)」。這是有道理的,根據表定義,我提供了六個數據,期望三個數據。我試着在兩組,每組三個提供的數據,用括號試圖仿效在上面的原劇本的VALUES條款,以及各種其他的事情,我不能去上班分離:

SELECT t.* FROM (
SELECT (@EVENT_ID, 'SBEPN', '41420F'), (@EVENT_ID, 'Notes', 'Sent to USER2')) 
t 
WHERE @EVENT_ID IS NOT NULL; 

這是可能的有多達6個這樣的後續條款,他們都需要使用相同的LAST_INSERT_ID(設置爲變量@EVENT_ID),因此它們與單個父行相關聯。

解決方法:我知道我可以做使用三個單組數據的多個刀片,EG:

INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE) 
SELECT t.* FROM ( 
    SELECT @EVENT_ID, 'SBEPN', '41420F') 
t 
WHERE @EVENT_ID IS NOT NULL; 

INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE)  
SELECT t.* FROM (
    SELECT @EVENT_ID, 'Notes', 'Sent to USER2') 
t 
WHERE @EVENT_ID IS NOT NULL; 

問:我能做到這一點在單個插入語句模仿第一個例子中有多個VALUES語句的結果?

回答

1

這是你想要的嗎?

INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE) 
    SELECT t.* 
    FROM (SELECT @EVENT_ID as e, 'SBEPN', '41420F' UNION ALL 
      SELECT @EVENT_ID as e, 'Notes', 'Sent to USER2' 
     ) t 
    WHERE e IS NOT NULL; 
+0

這很好,如果我不得不添加更多的子句,我可以加上另一個UNION ALL子句(已經測試過按預期工作)。非常感謝,我感謝幫助。 – delliottg 2014-09-19 17:08:31