2011-08-16 12 views
9

Ho creato uno script SQL per aggiungere una voce in un altro database. Tuttavia, quando eseguo lo script tramite SQL Server Management Studio.Errore: "Deve dichiarare la variabile scalare" per le istruzioni di inserimento in più database

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 

ho ottenuto il seguente errore:

Must declare the scalar variable '@address'

A questo punto, io sono totalmente confuso perché ho dichiarato la variabile @address prima di eseguire l'istruzione insert. È perché sto attraversando database diversi?

A partire da ora, ho appena inserito il valore reale nell'istruzione insert solo per il completamento dell'attività, anche se mi sono chiesto cosa abbia causato l'errore.

risposta

18

la variabile @address risiede solo nel batch definito in, i lotti sono delimitati dall'istruzione go, in cui non rientrano nell'ambito di applicazione.

provare questo:

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

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

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

Ah, ok. L'ambito del batch è terminato dall'istruzione 'go'. Adesso lo so! È un errore sottile: S. – OnesimusUnbound

2

È perché si sta utilizzando go tra l'affermazione che dichiara la variabile e la dichiarazione che lo utilizza.

Il comando go non è un comando SQL, è un separatore tra le sessioni in Management Studio. Basta rimuovere tutti i comandi go nella query e puoi utilizzare la variabile fino in fondo.

3

È la dichiarazione 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)

Problemi correlati