2009-09-28 7 views
4

S'il n'y a pas d'instructions begin et end dans sql, l'instruction suivante est la seule qui est exécutée si la condition if est vraie ... dans le cas ci-dessous, est-ce que l'instruction insert sera aussi être exécuté si la condition if est vraie?SQL SI ELSE BEGIN END

IF (a > 1) 
    SET @b = 1 + 2 
INSERT INTO #F (a, b, c) VALUES (1, 2, 3) 
+5

En fait, l'instruction INSERT sera exécutée si la condition IF est vrai. Il s'exécutera également si la condition IF est fausse. –

Répondre

8

L'instruction d'insertion sera appelée dans tous les cas, indépendamment de la clause if comme si la clause sera juste une ligne

si vous n'êtes pas certain d'ajouter BEGIN et fin (en fait j'ajoute toujours début et fin car même si c'est une ligne pour commencer vous ne savez jamais quand vous ou quelqu'un d'autre devrez ajouter une autre ligne)

7
IF (a > 1)  
    BEGIN 
    SET @b = 1 + 2 
    INSERT INTO #F (a, b, c) VALUES (1, 2, 3) 
    END 
+0

Vous avez besoin de la fin de début. – madcolor

1

Il est Begin/clause de fin dans TSQL.

IF (a > 1) 
BEGIN 
    SET @b = 1 + 2 
    INSERT INTO #F (a, b, c) VALUES (1, 2, 3) 
END 
1

«S'il n'y a commencer pas et les déclarations de fin dans sql, l'instruction suivante est la seule qui est exécuté si la condition if est vrai »

Je ne sais pas si c'est vrai, mais pourquoi ne pas envelopper dans un début/fin et ne pas s'inquiéter à ce sujet?

0

Essayez ceci:

IF (A > 1) 
BEGIN 
    SET @B = 1 + 2 
    INSERT INTO #F(a, b, c) VALUES (1, 2, 3) 
END 
0

Dans votre exemple, l'instruction insert sera TOUJOURS exécutée , parce que ce n'est pas évalué dans le cadre de t La déclaration IF.

Exemple de code pour MS SQL Server:

Declare @a as int 
Declare @b as int 
Set @a = 2 
If (@a > 1) Set @b = 1 + 2 Select 'Select Reached' 

Cela équivaut à l'écriture:

Declare @a as int 
Declare @b as int 
Set @a = 2 
If (@a > 1) 
BEGIN 
    Set @b = 1 + 2 
END 
Select 'Select Reached' 
Questions connexes