我在哪里可以在我的存储过程中设置DEADLOCK_PRIORITY?

Man*_*ion 5 deadlock stored-procedures sql-server-2008

我不确定我可以在哪里使用

SET DEADLOCK_PRIORITY...
Run Code Online (Sandbox Code Playgroud)

我的存储过程中的命令.在开始交易之前是否需要?或者它可以在交易的任何地方?

谢谢大家!

Pon*_*ife 9

我不确定我理解这个问题:你可以随时随地改变优先级.如果你不确定那么你可以把它放在程序的开头,除非它可能是一个非常长的过程,并且只有一个特定的查询容易出现死锁.

虽然更好的解决方案可能是尽可能避免死锁.

您可能还需要注意,当过程退出时,存储过程内的任何优先级更改都将重置为调用会话的优先级:

set deadlock_priority high
go
select deadlock_priority from sys.dm_exec_sessions where session_id = @@spid
go

create proc dbo.p 
as
begin
select deadlock_priority as 'PriorityBefore' from sys.dm_exec_sessions where session_id = @@spid 
set deadlock_priority low
select deadlock_priority as 'PriorityAfter' from sys.dm_exec_sessions where session_id = @@spid 
end
go

exec dbo.p

select deadlock_priority from sys.dm_exec_sessions where session_id = @@spid

drop proc dbo.p
go

set deadlock_priority normal
go
Run Code Online (Sandbox Code Playgroud)