0
두 프로세스가 동시에 실행되는 경우가 있습니다.SQL 대량 삽입 업데이트 - DeadLock 문제
첫 번째 대량 삽입에게 있습니다
using (var connection = new SqlConnection(connectionString))
{
var bulkCopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.TableLock)
{DestinationTableName = "CTRL.CTRL_DATA_ERROR_DETAIL",};
connection.Open();
try
{
bulkCopy.WriteToServer(errorDetailsDt);
}
catch (Exception e)
{
throw new Exception("Error Bulk writing Error Details for Data Stream ID: " + dataStreamId +
" Details of Error : " + e.Message);
}
connection.Close();
}
두 번째는 저장에서 Procedure--
UPDATE [CTL].[CTRL].[CTRL_DATA_ERROR_DETAIL]
SET [MODIFIED_CONTAINER_SEQUENCE_NUMBER] = @containerSequenceNumber
,[MODIFIED_DATE] = GETDATE()
,[CURRENT_FLAG] = 'N'
WHERE [DATA_ERROR_KEY] = @DataErrorKey
AND [CURRENT_FLAG] ='Y'
먼저 절차
코드의--Part를 저장에서 대량 업데이트입니다 프로세스가 (들어오는 레코드로드에 따라) 약간의 시간 동안 실행되고 두 번째 proc 에드워드는 항상 교착 상태의 희생자가됩니다.
두 번째 프로세스가 리소스가 해제 될 때까지 대기하도록 SqlBulkCopyOptions.TableLock
을 설정해야합니까?