|
database
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
If Else If condition failinghaving some issues with a conditional statement that I can't figure out. The statement has a conditional If statement with two Else If's that checks for a passed parameter's value (an integer I pass when executing the SP via ASP). Here is basically what I have: -- @SET STATUS has 3 valid values: -- 1 - Don't set status -- 2 - Set inactive -- 3 - Set active CREATE PROCEDURE dbo.sp_SomeProcedure @SET_STATUS int AS SET NOCOUNT ON IF @SET_STATUS = 1 IF EXISTS (SELECT STATEMENT) BEGIN UPDATE STATEMENT END ELSE BEGIN INSERT STATEMENT END ELSE IF @SET_STATUS = 2 IF EXISTS (SELECT STATEMENT) BEGIN UPDATE STATEMENT END ELSE IF @SET_STATUS = 3 IF EXISTS (SELECT STATEMENT) BEGIN UPDATE STATEMENT END GO When @SET_STATUS is set to either 1 or 2, the sequel statements run fine and the corresponding row gets updated or inserted accordingly. If however the @SET_STATUS is passed as 3, the procedure executes fine, but the update statement is not run. I've manually plugged in the "exists" condition and the update statement for this part of the procedure and they fire off correctly when run in QA. I'm at a loss. I've pretty much determined that it is failing at the "ELSE IF @SET_STATUS = 3" condition, but I don't know why since it passes the syntax check. Am I missing something here? Thanks in advance! Here's how I recommend the structure:
IF @SET_STATUS = 1 BEGIN ... do stuff ... END IF @SET_STATUS = 2 BEGIN ... do stuff ... END IF @SET_STATUS = 3 BEGIN ... do stuff ... END There's no need for ELSE, and you should always wrap the result of an IF statement in BEGIN/END. <tsig***@gmail.com> wrote in message Show quote news:1135797481.201874.264140@g47g2000cwa.googlegroups.com... > This is only the second stored procedure that I've written, and I'm > having some issues with a conditional statement that I can't figure > out. The statement has a conditional If statement with two Else If's > that checks for a passed parameter's value (an integer I pass when > executing the SP via ASP). Here is basically what I have: > > -- @SET STATUS has 3 valid values: > -- 1 - Don't set status > -- 2 - Set inactive > -- 3 - Set active > CREATE PROCEDURE dbo.sp_SomeProcedure > @SET_STATUS int > > AS > > SET NOCOUNT ON > IF @SET_STATUS = 1 > IF EXISTS (SELECT STATEMENT) > BEGIN > UPDATE STATEMENT > END > ELSE > BEGIN > INSERT STATEMENT > END > > ELSE IF @SET_STATUS = 2 > IF EXISTS (SELECT STATEMENT) > BEGIN > UPDATE STATEMENT > END > ELSE IF @SET_STATUS = 3 > IF EXISTS (SELECT STATEMENT) > BEGIN > UPDATE STATEMENT > END > GO > > > > When @SET_STATUS is set to either 1 or 2, the sequel statements run > fine and the corresponding row gets updated or inserted accordingly. > If however the @SET_STATUS is passed as 3, the procedure executes fine, > but the update statement is not run. > > I've manually plugged in the "exists" condition and the update > statement for this part of the procedure and they fire off correctly > when run in QA. I'm at a loss. I've pretty much determined that it is > failing at the "ELSE IF @SET_STATUS = 3" condition, but I don't know > why since it passes the syntax check. > > Am I missing something here? Thanks in advance! > Aaron, you're a rock star! It must not have liked the second "else if"
and after updating like you suggested, everything works like a champ. Thanks!!! The ELSE IF @SET_STATUS = 3 is the else of the IF EXISTS() under
@SET_STATUS = 2 So it's never actually getting to the IF @SET_STATUS = 3 statement. Add BEGIN..END around the IF EXISTS() under each ELSE IF e.g. ELSE IF @SET_STATUS = 2 BEGIN IF EXISTS (SELECT STATEMENT) BEGIN UPDATE STATEMENT END END ELSE IF @SET_STATUS = 3 BEGIN IF EXISTS (SELECT STATEMENT) BEGIN UPDATE STATEMENT END END tsig***@gmail.com wrote: Show quote > This is only the second stored procedure that I've written, and I'm > having some issues with a conditional statement that I can't figure > out. The statement has a conditional If statement with two Else If's > that checks for a passed parameter's value (an integer I pass when > executing the SP via ASP). Here is basically what I have: > > -- @SET STATUS has 3 valid values: > -- 1 - Don't set status > -- 2 - Set inactive > -- 3 - Set active > CREATE PROCEDURE dbo.sp_SomeProcedure > @SET_STATUS int > > AS > > SET NOCOUNT ON > IF @SET_STATUS = 1 > IF EXISTS (SELECT STATEMENT) > BEGIN > UPDATE STATEMENT > END > ELSE > BEGIN > INSERT STATEMENT > END > > ELSE IF @SET_STATUS = 2 > IF EXISTS (SELECT STATEMENT) > BEGIN > UPDATE STATEMENT > END > ELSE IF @SET_STATUS = 3 > IF EXISTS (SELECT STATEMENT) > BEGIN > UPDATE STATEMENT > END > GO > > > > When @SET_STATUS is set to either 1 or 2, the sequel statements run > fine and the corresponding row gets updated or inserted accordingly. > If however the @SET_STATUS is passed as 3, the procedure executes fine, > but the update statement is not run. > > I've manually plugged in the "exists" condition and the update > statement for this part of the procedure and they fire off correctly > when run in QA. I'm at a loss. I've pretty much determined that it is > failing at the "ELSE IF @SET_STATUS = 3" condition, but I don't know > why since it passes the syntax check. > > Am I missing something here? Thanks in advance! > Depending on what you're doing in the 3 updates, you may be able to combine
these into 1 statement. > IF @SET_STATUS = 1 AND NOT EXISTS (SELECT STATEMENT) Explain what the 3 updates do in your procedure and maybe we can suggest a > BEGIN > INSERT STATEMENT > END ELSE > BEGIN > UPDATE STATEMENT > END better way. In this part: > ELSE IF @SET_STATUS = 2 (or 3) I don't think that you need to check IF EXISTS unless you are performing an > IF EXISTS (SELECT STATEMENT) > BEGIN > UPDATE STATEMENT > END action if this is FALSE. Your update statement should affect 0 rows if it doesn't exist. <tsig***@gmail.com> wrote in message Show quote news:1135797481.201874.264140@g47g2000cwa.googlegroups.com... > This is only the second stored procedure that I've written, and I'm > having some issues with a conditional statement that I can't figure > out. The statement has a conditional If statement with two Else If's > that checks for a passed parameter's value (an integer I pass when > executing the SP via ASP). Here is basically what I have: > > -- @SET STATUS has 3 valid values: > -- 1 - Don't set status > -- 2 - Set inactive > -- 3 - Set active > CREATE PROCEDURE dbo.sp_SomeProcedure > @SET_STATUS int > > AS > > SET NOCOUNT ON > IF @SET_STATUS = 1 > IF EXISTS (SELECT STATEMENT) > BEGIN > UPDATE STATEMENT > END > ELSE > BEGIN > INSERT STATEMENT > END > > ELSE IF @SET_STATUS = 2 > IF EXISTS (SELECT STATEMENT) > BEGIN > UPDATE STATEMENT > END > ELSE IF @SET_STATUS = 3 > IF EXISTS (SELECT STATEMENT) > BEGIN > UPDATE STATEMENT > END > GO > > > > When @SET_STATUS is set to either 1 or 2, the sequel statements run > fine and the corresponding row gets updated or inserted accordingly. > If however the @SET_STATUS is passed as 3, the procedure executes fine, > but the update statement is not run. > > I've manually plugged in the "exists" condition and the update > statement for this part of the procedure and they fire off correctly > when run in QA. I'm at a loss. I've pretty much determined that it is > failing at the "ELSE IF @SET_STATUS = 3" condition, but I don't know > why since it passes the syntax check. > > Am I missing something here? Thanks in advance! > |
|||||||||||||||||||||||