SQL if else存储过程
我正在编写一个存储过程,它适用于if,但不适用于else。如果我得到了正确的ID值,那么它只会给我nullSQL 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
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新手,这就是为什么我还在学习的原因。谢谢你指出这一点。我从电源中删除了@,现在它可以工作了。直到现在才注意到。哈哈,谢谢!我很高兴能帮上忙。如果这是正确答案,请按此标记。