SQL select 插入中的服务器子查询
SQL Server Sub query in select insert
有什么建议可以让它发挥作用吗?从语法上讲它是正确的,并且单个子查询 return 单个结果,但是当组合子查询时,不会 return 结果到插入语句。本质上,如果视图中不存在这些记录,我会尝试将它们插入 table。
INSERT INTO PRG_T_BLK_MDL (BLK_ID, MDL_ID, GW, VE)
OUTPUT @@ROWCOUNT AS RC
SELECT (SELECT ID FROM PRG_T_BLK WHERE NAME=1),
(SELECT ID FROM PRG_T_MDL WHERE NAME='A'), 3500, 'AX'
FROM PRG_V_BLK_MDL
WHERE NOT EXISTS(SELECT 1 FROM PRG_V_BLK_MDL WHERE BLK=1 AND MDL='A' AND VER='AX')
我猜 OUTPUT
子句有效(我没有将它与 @@ROWCOUNT
一起使用,但似乎没问题)。
您不需要 FROM
子句 -- 至少整个 table 不需要。我可能会建议:
INSERT INTO PRG_T_BLK_MDL (BLK_ID, MDL_ID, GW, VE)
OUTPUT @@ROWCOUNT AS RC
SELECT (SELECT ID FROM PRG_T_BLK WHERE NAME = t.BLK),
(SELECT ID FROM PRG_T_MDL WHERE NAME = t.MDL), 3500, t.ver
FROM (SELECT 1 as BLK, 'A' as MDL, 'AX' as ver) t
WHERE NOT EXISTS (SELECT 1
FROM PRG_V_BLK_MDL v
WHERE v.BLK = t.BLK AND v.MDL = t.MDL AND v.ver = t.ver);
有什么建议可以让它发挥作用吗?从语法上讲它是正确的,并且单个子查询 return 单个结果,但是当组合子查询时,不会 return 结果到插入语句。本质上,如果视图中不存在这些记录,我会尝试将它们插入 table。
INSERT INTO PRG_T_BLK_MDL (BLK_ID, MDL_ID, GW, VE)
OUTPUT @@ROWCOUNT AS RC
SELECT (SELECT ID FROM PRG_T_BLK WHERE NAME=1),
(SELECT ID FROM PRG_T_MDL WHERE NAME='A'), 3500, 'AX'
FROM PRG_V_BLK_MDL
WHERE NOT EXISTS(SELECT 1 FROM PRG_V_BLK_MDL WHERE BLK=1 AND MDL='A' AND VER='AX')
我猜 OUTPUT
子句有效(我没有将它与 @@ROWCOUNT
一起使用,但似乎没问题)。
您不需要 FROM
子句 -- 至少整个 table 不需要。我可能会建议:
INSERT INTO PRG_T_BLK_MDL (BLK_ID, MDL_ID, GW, VE)
OUTPUT @@ROWCOUNT AS RC
SELECT (SELECT ID FROM PRG_T_BLK WHERE NAME = t.BLK),
(SELECT ID FROM PRG_T_MDL WHERE NAME = t.MDL), 3500, t.ver
FROM (SELECT 1 as BLK, 'A' as MDL, 'AX' as ver) t
WHERE NOT EXISTS (SELECT 1
FROM PRG_V_BLK_MDL v
WHERE v.BLK = t.BLK AND v.MDL = t.MDL AND v.ver = t.ver);