如果INSERT失败,则从INSERT子句输出值

时间:2017-09-04 09:11:44

标签: sql sql-server tsql

我有一个类似以下的插入语句;

INSERT INTO Table1(Value1, Value2, Value3)
SELECT A.Value1, B.Value2, C.Value3
FROM       Fn1 A 
           INNER JOIN Table2 B ON A.ID = B.AID
           INNER JOIN Table3 C ON C.ID = B.CID
WHERE      A.ID = 4

在上面的代码中,有可能实际上没有插入任何内容,例如,如果JOIN没有返回任何值。有没有办法可以输出Value1,Value2和Value3,即使插入失败?在这种情况下,MERGE和OUTPUT不会实际插入任何内容。

我试图将一些审计插入到一个更复杂的查询中,并使用动态计算的值,而不必重新编写它以先将值计算到变量中,所以想知道是否有像上面那样的快捷方式。

2 个答案:

答案 0 :(得分:0)

试试这个:

INSERT INTO Table1(Value1, Value2, Value3)
SELECT A.Value1, B.Value2, C.Value3
FROM       Fn1 A 
           FULL OUTER JOIN Table2 B ON A.ID = B.AID
           FULL OUTER JOIN Table3 C ON C.ID = B.CID
WHERE      A.ID = 4

答案 1 :(得分:0)

试试这个:

 INSERT INTO Table1(Value1, Value2, Value3)
    SELECT A.Value1, ISNULL(B.Value2,0), ISNULL(C.Value3,0)
    FROM       Fn1 A 
               LEFT JOIN Table2 B ON A.ID = B.AID
               LEFT JOIN Table3 C ON C.ID = B.CID
    WHERE      A.ID = 4