tipos sentencia resueltos que programacion lenguaje estructura else ejercicios ejemplos decisiones condiciones condicional sql sql-server tsql

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".