SQL if else存储过程

SQL if else存储过程,sql,sql-server,if-statement,Sql,Sql Server,If Statement,我正在编写一个存储过程,它适用于if,但不适用于else。如果我得到了正确的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 T

我正在编写一个存储过程,它适用于if,但不适用于else。如果我得到了正确的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 ID=@ID 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

问题很可能在于
@Power
变量。在两个
SELECT
语句中,唯一的区别是一个语句在
WHERE
子句中包含
@Power='false'
,而另一个语句包含
@Power='true'


由于
@Power
是一个变量,而不是
TempCycle
表中的实际列,我猜您实际上是想通过
Power=@Power
对这两个变量进行过滤。

检查TestEE\u Mod中的Test\u ID是否返回null或空白,并打印@TypeID以检查值,另一方面,你的else语句是正确的。在一个不相关的注释中,为什么你的
UPDATE
语句被包围在自己的
BEGIN…END
块中?@JonSenchyna我以为我需要它们,但现在我删除了它们。我是SQL新手,这就是为什么我还在学习的原因。谢谢你指出这一点。我从电源中删除了@,现在它可以工作了。直到现在才注意到。哈哈,谢谢!我很高兴能帮上忙。如果这是正确答案,请按此标记。