2016-03-04 110 views
3

任何建议让这个工作?在语法上它是正确的,并且各个子查询返回单个结果,但是当组合时,子查询不会将结果返回给插入语句。基本上,我试图将这些记录插入表中,如果它们不存在于视图中。选择插入SQL Server子查询

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') 
+0

您是否尝试将此从不存在转换为EXCEPT? – websch01ar

回答

4

我猜测的OUTPUT子句的工作(我还没有@@ROWCOUNT使用它,但它似乎确定)。

您不需要FROM子句 - 至少不是整个表。我可能会建议:

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); 
+1

这样做,谢谢! – James