Должна ли вставка строк с TVP быть в транзакции? - PullRequest
0 голосов
/ 30 июня 2019

У меня есть 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 Ответ

1 голос
/ 30 июня 2019

Нет, вы должны использовать явные транзакции только тогда, когда у вас есть несколько операторов SQL, которые вы хотите выполнить как атомарную операцию.

Отдельные операторы SQL выполняются в неявной транзакции, поэтому любой отдельный оператор может либо успешно завершиться, либо полностью потерпеть неудачу - у вас никогда не будет insert...select, который завершается неудачей в середине операции выбора и вставляет только часть строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...