此问题建立在previous question on conditional inserts之上。我现在要解决的问题是,当我使用相同的VALUES
(设置为LAST_INSERT_ID
)插入多个@EVENT_ID
时。使用我以前的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列”。这是有道理的,我提供了六个数据,根据表的定义,它需要三个数据。我试着用两组三个数据提供数据,用括号分隔试图模仿上面原始脚本中的VALUES
子句,以及其他各种我无法工作的事情:
SELECT t.* FROM (
SELECT (@EVENT_ID, 'SBEPN', '41420F'), (@EVENT_ID, 'Notes', 'Sent to USER2'))
t
WHERE @EVENT_ID IS NOT NULL;
可能有多达六个这样的后续条款,并且它们都需要使用相同的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语句的结果吗?
答案 0 :(得分: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;