ок. Таким образом, тупик - это два процесса, конкурирующих за одни и те же данные, но ожидающие завершения другого до его обновления (или освобождения блокировки). Одной из причин блокировки данных является предотвращение «грязного чтения». т. е. считывание устаревших данных, поскольку оно уже обновлено.
Таким образом, блокировка происходит по какой-либо причине, то есть там, чтобы защитить целостность ваших данных.Отключение его WITH (NO LOCK) должно выполняться только в том случае, если вы уверены, что ваша система не пострадает в результате. В противном случае вы начнете получать повреждение данных, т. Е. Плохие данные.
Я бы сказал, что использование WITH (NO LOCK) безопасно с процедурами, которые только сообщают, то есть выбирает без каких-либо последующих обновлений и не влияет на работу системы. Для процедур, которые выбирают, а затем обновляют не очень хорошо.
В соответствии с ответом @idstam, если вам нужно выбрать данные, принять некоторые решения и затем обновить их, они должны быть как можно короче. то есть время между выбором и обновлением должно быть коротким, потому что это время блокировки и, следовательно, окно возможности для тупика. Это более распространено в многопользовательской системе, где пользователи просматривают одни и те же данные.
Итак, да, вы можете отказаться от блокировки, но будьте осторожны, это может оставить вам плохие данные. Лучше всего понять, что такое взаимоблокировка и определить, можно ли его улучшить. Если вы попытаетесь свести к минимуму блокировки путем снижения уровня изоляции, вам нужно будет использовать управление версиями строк, то есть каждое обновление проверяет, обновляет ли данные, которые он видел в последний раз, а если нет (то есть он был обновлен тем временем), он выдает ошибку ,
Here is a good MSDN article on how to reduce deadlocks