Устранение тупика - SQL Server - PullRequest
0 голосов
/ 18 февраля 2019

Я захожу в тупик между этими 2 запросами из двух отдельных хранимых процедур:

1.

UPDATE ord
SET
    [Num] = @Num,
    [Ref] = @Re,
    [Date] = @Date
FROM [Order] ord
INNER JOIN [Orders_Open] oo ON oo.Id = ord.ID

2.

    UPDATE oo
    SET oo.Name = i.Name,
    oo.Email = i.Email,
    oo.PostCode = i.PostCode,
    FROM Item_Order i 
    INNER JOIN [Orders_Open] oo ON oo.ID = i.ID

Что лучшеспособ предотвратить возникновение тупика?Я пытался использовать удерживающую блокировку для предотвращения тупика до того, как он произойдет:

например,

    UPDATE oo WITH (HOLDLOCK)
    SET oo.Name = i.Name,
    oo.Email = i.Email,
    oo.PostCode = i.PostCode,
    FROM Item_Order i 
    INNER JOIN [Orders_Open] oo ON oo.ID = i.ID

Будет ли это работать?Или кто-нибудь еще может дать совет, что еще можно попробовать?

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Лучший способ - настроить оба на производительность, поэтому менее вероятно, что они будут работать одновременно.

0 голосов
/ 18 февраля 2019

Вы не можете обновить одну и ту же запись одновременно, потому что целостность данных должна сохраняться в каждой транзакции.

целостность данных относится к точности и согласованность данных, хранящихся в базе данных, хранилище данных, витрине данных или другой конструкции.

Вы можете использовать один блок транзакции для обоих запросов, чтобы предотвратить взаимоблокировку.

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