2014-02-12 5 views
0

저장 프로 시저를 작성 중이지만 다른 경우에는 작동하지 않습니다. 나는 올바른 ID 값을 얻었지만, 그렇지 않으면 그냥 null을 제공합니다.다른 경우 저장 프로 시저

SELECT @ID = ID FROM PRODUCTS WHERE SN = @SN 
SELECT @Chip_ID = Chip_ID FROM PRODUCTS WHERE SN = @SN 
SELECT @Power = Power From Module_Cycle WHERE ChipID = @Chip_ID 

SELECT @Test_ID=Test_ID FROM TestEE_Mod WHERE [email protected] AND @TypeID = TypeID 
IF(@Test_ID IS NOT NULL) 
BEGIN 

    IF(@TypeID = '3') 
    BEGIN 
     SELECT @Temp_TestID=TestID FROM TempCycle WHERE ChipID = @Chip_ID AND @Power = 'false' 
     BEGIN 
      UPDATE TestEE_Mod SET Temp_TestID = @Temp_TestID WHERE ID = @ID AND TypeID = @TypeID 
     END 
    END 

    ELSE 
    BEGIN 
     SELECT @Temp_TestID=TestID FROM TempCycle WHERE ChipID = @Chip_ID AND @Power = 'true' 
     BEGIN 
      UPDATE TestEE_Mod SET Temp_TestID = @Temp_TestID WHERE ID = @ID AND TypeID = @TypeID 
     END 
    END 
END 
+0

Test_ID FROM TestEE_Mod가 null 또는 공백을 반환하고 값을 확인하기 위해 @TypeID를 인쇄하는지 확인하십시오. 그렇지 않으면 다른 else 문이 정확합니다. –

+0

관련없는 메모에서 왜 자신의 'BEGIN ... END' 블록? –

+0

@JonSenchyna 필요하다고 생각했지만 지금은 제거했습니다. 나는 SQL을 처음 사용하기 때문에 학습 과정에서 여전히 그 이유가 있습니다. 그 점을 지적 해 주셔서 감사합니다. – user2994144

답변

1

대부분이 문제는 @Power 변수에 있습니다. 두 개의 SELECT 문에서 유일한 차이점은 이 WHERE 절에 있고 다른 하나가 @Power = 'true'입니다.

@Power은 변수이며 실제로 TempCycle 테이블의 실제 열이 아니기 때문에 실제로 두 필터 모두 Power = @Power으로 필터링 할 예정입니다.

+0

@Power에서 @을 제거했는데 이제는 작동합니다. 지금까지 그것을 알아 차리지 못 했어. 감사합니다! – user2994144

+0

도와 드릴 수있어서 기쁩니다. 이것이 정답이면, 그렇게 표시하십시오. –

관련 문제