На что должен ссылаться @Resource при использовании sp_getapplock? - PullRequest
2 голосов
/ 30 июля 2011

В документации MSDN для sp_getapplock написано:

[@ Resource =] 'resource_name' Строка, определяющая имя, которое идентифицирует ресурс блокировки.

Ресурс блокировки, созданный sp_getapplock, создается в текущей базе данных для сессия. Каждый ресурс блокировки идентифицируется объединенными значениями:

  • Идентификатор базы данных, содержащей ресурс блокировки.
  • Принцип базы данных, указанный в параметре @DbPrincipal.
  • Имя блокировки, указанное в параметре @Resource.

Мои вопросы:
1. «имя_ресурса» - это просто старое имя, которое вы придумываете?
2. должно ли 'resource_name' ссылаться на имя таблицы или сохраненное имя процедуры или (именованное) имя транзакции?

1 Ответ

2 голосов
/ 30 июля 2011

Да, это любое старое имя, которое ты придумал. Вы можете сказать "sp_getapplock 'kitten'", и он будет ждать, пока блокировка "котенка" будет снята, прежде чем получить его для себя и продолжить. Вы должны определить ресурсы, которые имеют смысл сериализовать доступ к.

Мне не нравится идея именовать блокировку после таблицы, потому что тогда для других кодировщиков подразумевается, что доступ к этой таблице сериализуется, когда в SQL Server нет ничего (кроме структуры applock) для принудительного применения этого. Другими словами, апплосы похожи на светофор. В красном свете нет ничего, что мешало бы вам идти вперед. Это просто хорошая идея не делать этого.

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