2014-02-12 147 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

我很高兴能帮上忙。如果这是正确的答案,请将其标记为如此。 –