2017-10-17 5 views
0

J'ai du mal à comprendre pourquoi le SQL ci-dessous ne fonctionnera pas. J'ai mis un commentaire (---------- Fine jusqu'à ici), qui est où SQL Server acceptera le code quand j'analyse/enregistre le processus de magasin.Instruction SQL IF/ELSE

Le bit ci-dessous, il ne prendra pas. Toujours nouveau sur SQL, toute aide serait géniale.

L'erreur que je reçois est, Syntaxe incorrecte près du mot clé 'ELSE'. Le "SINON" étant celui sous le commentaire que j'ai mentionné ci-dessus.

Ce que je ne comprends pas non plus, c'est que si je change le IF et le BEGIN round, SQL l'accepte (ci-dessous)? Je pensais que ELSE IF n'était pas possible.

----------Fine up to Here 
ELSE 
IF (@GrabTypeID = '') 
    BEGIN 


**************************************** 
Code below 

************************************** 
IF (@GrabtypeID NOT IN (SELECT GRABTYPEID FROM Mytable) AND @GrabtypeID != '')  OR 

(@Variable1 NOT IN (SELECT ID FROM Mytable) AND @Variable1 !='')                    


BEGIN 
    SELECT @ErrorMessage ='The GrabTypeID or the ID is an invalid value'   
    RAISERROR (@ErrorMessage, 16, 1) 

PRINT 'Invalid Parameters passed Through' 

    RETURN 
END 

ELSE 
    BEGIN 

IF (@GrabtypeID ! ='') 


TRUNCATE TABLE Datatable1 
TRUNCATE TABLE Datatable2 

INSERT Datatable1 
SELECT * FROM Referencetable1 

INSERT Datatable2 
SELECT * FROM REFERENCETABLE2 

END 

----------Fine up to Here 

ELSE 
    BEGIN 

IF (@GrabTypeID = '') 


TRUNCATE TABLE Datatable1 
TRUNCATE TABLE Datatable2 

INSERT Datatable1 
SELECT * FROM REFERENCETABLE1 WHERE CATEGORY = 4 

INSERT Datatable2 
SELECT * FROM REFERENCETABLE2 WHERE CATEGORY = 4 

END 

GO 
+1

Il vous manque un marqueur BEGIN après le mot clé IF. – Stavr00

Répondre

2

Votre format est un peu bizarre. Vous pouvez le faire fonctionner la façon dont vous l'avez, mais je pense qu'il serait préférable d'utiliser ce format:

IF expression 
BEGIN 
SELECT 
END 
ELSE IF expression 
BEGIN 
SELECT 
END 
ELSE IF expression 
BEGIN 
SELECT 
END 

Plus précisément, changer ceci:

ELSE 
BEGIN 

IF (@GrabtypeID ! ='') 

Pour cela (dans les deux lieux):

ELSE IF (@GrabtypeID ! ='') 
BEGIN