2011-08-16 12 views
9

Creé una secuencia de comandos SQL para agregar una entrada en una base de datos diferente. Sin embargo, cuando ejecuto el script a través de SQL Server Management Studio.Error: "Debe declararse la variable escalar" para las instrucciones de inserción en la base de datos múltiple

declare @address varchar(50) 
set @address = 'Hope' 

use DB1 
go 

insert into Address 
values (@address) 
go 

use DB2 
go 

insert into Address 
values (@address) 
go 

me dieron el siguiente error:

Must declare the scalar variable '@address'

En este punto, estoy totalmente confundido porque yo he declarado la variable @address antes de ejecutar la instrucción insert. ¿Es porque estoy atravesando diferentes bases de datos?

Por el momento, acabo de poner el valor real en la declaración insert solo por el bien de completar la tarea, aunque me pregunté qué causó el error.

Respuesta

18

la variable @address solo vive en el lote que está definido en, los lotes están delimitados por la declaración go, donde está fuera del alcance.

probar esto:

declare @address varchar(50) 
set @address = 'Hope' 

insert into DB1.dbo.Address 
values (@address) 

insert into DB2.dbo.Address 
values (@address) 
go 
+3

Ah, de acuerdo. El alcance del lote finaliza mediante la instrucción 'go'. ¡Ahora sé! Es un error sutil: S. – OnesimusUnbound

2

Es porque está utilizando go entre la sentencia que declara la variable y la declaración que lo utiliza. El comando go no es un comando SQL, es un separador entre sesiones en Management Studio. Simplemente elimine todos los comandos go en su consulta, y puede usar la variable hasta el final.

3

Es la declaración de GO.

all local variable declarations must be grouped in a single batch. This is done by not having a GO command until after the last statement that references the variable. (from MSDN)

Cuestiones relacionadas