sql - sentencia - ¿Por qué se declara la variable dentro de la declaración IF incluso cuando la condición se evalúa como falsa?
sentencia if else en c++ (2)
SQL Server no tiene alcance de variable de nivel de bloque.
Es por lote / proceso almacenado, etc.
De MSDN (mi negrita)
El alcance de una variable es el rango de las instrucciones Transact-SQL que pueden hacer referencia a la variable. El alcance de una variable dura desde el punto en que se declara hasta el final del lote o procedimiento almacenado en el que se declara.
Dado que @A nunca se declara, el servidor SQL debe lanzar un error, pero no lo hace. ¿Porqué es eso?
DECLARE @i int = 1;
IF @i > 10
BEGIN
DECLARE @A int = 100;
END
PRINT @A; // doesn''t return any result
gracias
gbn''s respondió la pregunta, pero en una nota relacionada, tenga cuidado con códigos como este:
DECLARE @i INT = 0
WHILE @i < 2
BEGIN
DECLARE @a VARCHAR(100)
IF @i = 0
SET @a = ''changed''
PRINT COALESCE(@a, ''is null'')
SET @i = @i + 1
END
Cuando se ejecuta, imprime "cambiado" dos veces, mientras que muchas personas probablemente esperen que imprima "cambiado", entonces "es nulo". Tenga cuidado al declarar variables dentro de los bucles. Es posible que desee establecerlo explícitamente en NULL en la declaración. p.ej
DECLARE @a VARCHAR(100) = NULL
Cuando se ejecuta esta versión modificada, muestra "modificado" y luego "es nulo".