Я проверял это последние несколько минут, так как это то, о чем я должен знать больше. Вот что я нашел.
Транзакции были бы полезны для выбора, если вы хотите заблокировать эту строку, когда человек читает записи и не хочет, чтобы она изменялась или читалась. Например, запустите эти запросы:
(в окне запроса 1)
НАЧАТЬ ТРАН
SELECT * FROM MYTABLE с (ROWLOCK XLOCK)
ГДЕ ID = 1
(в окне запроса 2)
ВЫБРАТЬ * ИЗ MYTABLE
ГДЕ ID = 1
(окно запроса 2 не вернет результаты, пока вы не запустите его в окне 1)
COMMIT TRAN
Полезные ссылки:
http://msdn.microsoft.com/en-us/library/aa213039.aspx
http://msdn.microsoft.com/en-us/library/aa213026.aspx
http://msdn.microsoft.com/en-us/library/ms190345.aspx
Моя цель состояла в том, чтобы получить что-то, чтобы заблокировать - и это наконец заработало после добавления туда XLOCK. Просто использование ROWLOCK не работало. Я предполагаю, что он выдавал общую блокировку (и данные были прочитаны) .. но я все еще исследую это.
Добавление - WITH (UPDLOCK ROWLOCK) - позволит вам выбрать и заблокировать строки для обновлений, что поможет с параллелизмом.
Будьте осторожны с табличными подсказками. Если вы начнете применять их беспорядочно, ваша система замедлится до ползания, если в вашем приложении будет даже небольшое количество пользователей. Это единственное, что я знал до того, как заглянул в это;)