собрал такую обработку на внутри ХП:
X++:
DECLARE @RetryCount tinyint
SET @RetryCount = 0
WHILE @RetryCount < 5
BEGIN
BEGIN TRY
BEGIN TRANSACTION
...
COMMIT TRANSACTION
BREAK
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
IF ERROR_NUMBER() IN ( 1204, -- SqlOutOfLocks
1205, -- SqlDeadlockVictim
1222 -- SqlLockRequestTimeout
)
and @RetryCount < 5
begin
SET @RetryCount = @RetryCount + 1
WAITFOR DELAY '00:00:02'
end
ELSE -- ,
THROW ;
END CATCH;
END
-- :
-- [url]https://technet.microsoft.com/en-us/library/aa175791(v=sql.80).aspx[/url]
-- [url]https://www.mssqltips.com/sqlservertip/3188/implementing-sql-server-transaction-retry-logic-for-failed-transactions/[/url]
-- [url]http://stackoverflow.com/questions/7559849/is-it-a-good-idea-to-handle-deadlock-retry-from-stored-procedure-catch-block[/url]