2013-02-12 1 views
1

트리거를 통해 생성 된 의심스러운 데이터베이스 트랜잭션을 디버깅하려고 시도했으며 T-SQL을 단계별 실행 중 예기치 않은 결과가 발생했습니다. 다음 FETCH NEXT FROM Updated_Cursor 통해 커서의 값을 얻은 후에, 난 삽입 일부 처리 이후할지 여부를 결정하는 두 가지 변수를 평가할 커서로부터 페치 각 행 다음 while 루프를 입력 :커서를 사용하여 TSQL 트리거에서 예기치 않은 동작이 발생했습니다. 값 1과 0을 가진 AND 연산자가 참으로 계산됩니다.

WHILE @@FETCH_STATUS = 0 
BEGIN 
     IF (@first_indicator > 0 AND @second_indicator >0) 
     BEGIN 
       --processing and insert occurs here 

디버그 모드, 코드를 통해 스테핑, 나는 @first_indicator=1@second_indicator=0의 값이이 조건이 나에게 이해가되지 않는 사실로 평가되는 것을 볼 수 있습니다. 중복되고 오류가있는 행이 삽입됩니다. 두 변수는 bit 데이터 유형입니다.이 데이터 유형은 관련성이 있다고 생각되지만 왜 이런 일이 발생했는지는 알기 어렵습니다.

+2

잘, 당신의 코드는'second_indicator'를 가지고 있고''값이''second_indictor' (누락 된'a') 인 것을 보아라. 만약 그것이 오타가 아니라면, 두 개의 다른 변수가있다. –

+2

컨텍스트가 충분하지 않습니다. –

+2

OT : 그러나 트리거에서 커서를 사용하지 않으려 고 시도하면 100 회 중 99 회가 잘못됩니다. –

답변

1

과 같이 커서에서 코드를 당겨 :

예상 인쇄되지 않습니다대로 작동
DECLARE @f BIT = 1 
DECLARE @s BIT = 0 

IF(@f>0 AND @s>0) PRINT 'GH'; 

. if 문이 실행될 때 적절한 시점에 올바른 변수를 찾고 있습니까?

또한 댓글에 언급 된 두 개의 IF 문도 동일하지 않습니다. 그러므로 나는 당신의 실제 질문이 정확히 무엇인지 확신하지 못합니다.

+0

오타를 수정하기 전에 두 번째 메모를 보았을 수 있습니다. 그들은 이제 두 가지 변수에 대해 동등한 평가를 받아야합니다. 나는 정확한 값을보고 있었지만, 당신이 제시 한대로 별도의 쿼리에 문장을 추가 할 때 예상대로 평가된다는 것을 알 수 있으므로, 원래의 질문이 유효한지 또는 더 이상 확실하지 않다. – Christian