2009-12-28 5 views
22

Comment écrire une instruction IF avec plusieurs arguments dans T-SQL?Instruction IF à arguments multiples - T-SQL

erreur source actuelle:

DECLARE @StartDate AS DATETIME 
DECLARE @EndDate AS DATETIME 

SET @StartDate = NULL 
SET @EndDate = NULL 

IF (@StartDate IS NOT NULL AND @EndDate IS NOT NULL) 
    BEGIN 
     -- do some work 
    END 

Il jette l'erreur suivante:

Incorrect syntax near the keyword 'AND'. Incorrect syntax near the keyword 'AND'. Incorrect syntax near ')'.

+1

Fonctionne sur ma machine? Je pense que l'erreur pourrait être entre votre 'BEGIN' et' END'. Ou, si vous n'avez rien entre 'BEGIN' et' END', ce serait le problème. – Aaronaught

+0

Merci pour l'entrée. C'était la section '--de travail 'qui causait le problème. Je construis une instruction SQL dynamique ... Pouah! –

Répondre

38

Vous le faites à droite. Le bloc de code vide est ce qui est à l'origine votre problème Ce n'est pas la structure de la condition :)

DECLARE @StartDate AS DATETIME 

DECLARE @EndDate AS DATETIME 

SET @StartDate = NULL 
SET @EndDate = NULL 

IF (@StartDate IS NOT NULL AND @EndDate IS NOT NULL) 
    BEGIN 
     print 'yoyoyo' 
    END 

IF (@StartDate IS NULL AND @EndDate IS NULL AND 1=1 AND 2=2) 
    BEGIN 
     print 'Oh hey there' 
    END 
1

C'est la façon de créer des complexes expressions booléennes: les combiner avec AND et OR. L'extrait que vous avez publié ne génère aucune erreur pour l'IF.

1

Cela semble fonctionner correctement.

Si vous avez un vide bloc BEGIN ... END vous pouvez voir

Msg 102, Level 15, State 1, Line 10 Incorrect syntax near 'END'.

1

Je ne sais pas quel est le problème, cela semble fonctionner très bien?

DECLARE @StartDate AS DATETIME 
DECLARE @EndDate AS DATETIME 

SET @StartDate = NULL 
SET @EndDate = NULL 

IF (@StartDate IS NOT NULL AND @EndDate IS NOT NULL) 
    BEGIN 
     Select 'This works just fine' as Msg 
    END 
Else 
    BEGIN 
    Select 'No Lol' as Msg 
    END 
1

Votre code est valide (avec une exception). Il est nécessaire d'avoir le code entre BEGIN et END.

Remplacer

--do some work 

avec

print '' 

Je pense peut-être que vous avez vu « FIN et non "ET"