2014-02-12 98 views
0

我正在寫一個存儲過程,它的工作如果但不是其他。因爲如果我得到正確的ID值,但其他只是給我null。SQL如果其他存儲過程

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

在不相關的註釋中,爲什麼您的'UPDATE'語句包圍在它們自己的'BEGIN ... END'塊? –

+0

@JonSenchyna我以爲我需要他們,但我現在把他們刪除了。我不熟悉SQL,這就是爲什麼仍然在學習過程中。謝謝你指出。 – user2994144

回答

1

最有可能的問題在於@Power變量。在您的兩條SELECT聲明中,唯一的區別是其中一條包含WHERE條款中的@Power = 'false',而另一條包含@Power = 'true'

由於@Power是一個變量,而不是你的TempCycle表中的實際列,所以我猜你實際上是想在它們兩個中過濾Power = @Power

+0

我從@Power中刪除@現在它可以工作。直到現在沒有注意到它。哈哈謝謝! – user2994144

+0

我很高興能幫上忙。如果這是正確的答案,請將其標記爲如此。 –