是否应在TVP中插入行?

时间:2019-06-30 14:47:50

标签: sql tsql insert table-valued-parameters

我有一个TVP类型List_Of_Items,并且想要一次插入多行,所以我的选择是将存储过程与TVP参数一起使用,如下所示。这样的插入安全吗,我可以摆脱交易了吗?还是它的潜在危险,因为插入内容可能会在中间破裂,因此必须进行交易吗?

CREATE PROC Insert_Order_With_Details 
(
     @Items List_Of_Items
) 
AS
BEGIN
    BEGIN TRANSACTION
        INSERT INTO OrderDetails (OrderId, CustomerId, ItemId, Quantity)
            SELECT @OrderID, @CustomerID, ItemID, Quantity
            FROM @Items
    COMMIT
END

1 个答案:

答案 0 :(得分:1)

否,仅当您有多个要作为原子操作运行的SQL语句时,才应使用显式事务。

单个SQL语句在隐式事务中运行,因此任何单个语句都可以成功完成或完全失败-您将永远不会有insert...select在select操作中间失败并且只插入部分语句的情况。行。