2013-01-18 1 views
0

안녕하세요 .net 코드에서 저장 프로 시저를 호출하고 있습니다. 저장 프로시 저는 .net 코드에서 전송 된 매개 변수를 기반으로 특정 값을 계산합니다. 특정 값을 계산 한 후 동일한 테이블에 대한 3 개의 Insert 문이 저장 프로 시저의 끝에서 실행됩니다. 나는 때때로 이러한 삽입 문이 테이블에 레코드를 삽입하지 않는다는 것을 알게되었습니다. 저장 프로 시저가 제대로 호출되고 매개 변수가 가로 질러 전송되는지 철저히 검사 했으므로 이것은 매우 이상합니다. 또한 단 하나의 스레드가 실행될 때 문제가 발생하지 않습니다. 그것은 내가 동일한 저장 프로 시저를 병렬로 액세스하는 9 개의 스레드를 실행하고있는 경우에만 해당됩니다.저장 프로 시저를 통해 실행되는 Insert 문에서 간헐적 인 오류가 발생하는 여러 스레드

일부 설정을 확인하거나 누락 된 부분이 있는지 제안하십시오.

교착 상태가 발생하여 삽입을 방해 할 수 있습니다. 그러나 나는 확실하지 않다. 또한 테이블의 인덱스에서 allow_row_locks 및 allow_page_locks를 확인했으며 'ON'으로 설정되었습니다.

답변

0

나는 코드가 삽입 할 값이 같아서 테이블의 제약 조건을 위반한다고 말합니다.

테이블에 기본 키 또는 고유 키가 있습니까? 어쩌면 테이블에 트리거를 검사 할 수있는 검사가있을 수 있습니까?

+0

안녕하세요 조지 내가 NULL 수 없으며 고유해야합니다 1 Pkey가 있습니다 .. 나는 삽입이 호출 될 때마다 PKey를 생성하는 기능을 사용하고 있습니다. CREATE FUNCTION [Function1] (@ inValue [nvarchar] (4000)) RETURNS [NVARCHAR (16)가 기능 1 ('001')와 같은 삽입 문에서 함수를 호출 를 GO 호출자와 EXECUTE 이 고유의 16 자리 NVARCHAR 매번 생성해야합니다 .. 당신이 수도 생각합니까 어떤 문제가 발생 했습니까? – Sourav

+0

안녕하세요 Sourav, 나는 PKEY를 생성하는 함수 뒤에있는 논리를 모르지만, 나는 확실히 그것이 당신의 문제의 원인이 될 것으로 의심합니다. 다른 고유 한 결과를 생성하는 경우 내부에서 일종의 임의 화를 사용한다는 의미입니다. 그것은 시스템의 시간과 관련이 있습니까? 그렇다면 고유 한 응답을 생성하기 전에 지연을 추가해야합니다. 이는 동일한 순간에 함수가 실행될 수 있기 때문입니다. 다른 것들 (예 : 무작위 랜덤)과 관련이있을 경우 그 자체로 위험합니다. – GeorgeVremescu

+0

안녕하세요, George, 귀하의 의견에 감사드립니다. 그 PKey 필드를 계속 확인하고 있습니다. 이 PKey가 문제를 일으키는 것으로 생각됩니다. 그러나 여전히 똑같은 것을 시험하고 그것을 교정 할 방법을 시험해보십시오. 문제가 해결되면 다시 게시됩니다. 엄청 고마워. :) – Sourav

관련 문제