Использование TABLOCK с SQL Server слияния - PullRequest
0 голосов
/ 18 октября 2018

У меня есть запрос на слияние, аналогичный приведенному ниже:

MERGE [Unshipped] u
USING [Order] or ON or.ID = u.ID

WHEN MATCHED AND u.Date <> or.Date
   THEN
      UPDATE 
      SET u.Date = or.Date

WHEN NOT MATCHED
    THEN 
       INSERT (ID, FK, Date)
       VALUES (or.ID, or.FK, or.Date)

Если я хочу добавить TABLOCK, где это лучшее место для него?Я бы предположил, что я бы сказал, как показано ниже - обернуть весь оператор слияния:

     MERGE [Unshipped] u WITH (TABLOCK)
     USING [Order] order or ON or.ID = u.ID

или это более подходит для этого с оператором вставки?

1 Ответ

0 голосов
/ 18 октября 2018

Первый вопрос, который вы должны задать себе, - зачем вам вообще нужен этот табличный совет?Слияние - это оператор DML с запусками в неявной транзакции.Таким образом, вы заблокируете всю таблицу, но если вы хотите это сделать, вы должны поместить подсказку на таблицу, которую вы NEED должны заблокировать.Просто взгляните на документацию: https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017

MERGE [Unshipped] u WITH (TABLOCK)

USING [Order] order as or WITH (TABLOCK) ON or.ID = u.ID

Это действительно зависит от того, какую таблицу вы хотите заблокировать Unshipped или Order.

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