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语句的结果?
这很好,如果我不得不添加更多的子句,我可以加上另一个UNION ALL子句(已经测试过按预期工作)。非常感谢,我感谢帮助。 – delliottg 2014-09-19 17:08:31