2011-08-16 15 views
9

我創建了一個SQL腳本來在不同的數據庫中添加一個條目。但是,當我通過SQL Server Management Studio運行腳本時。錯誤:在多個數據庫中插入語句的「必須聲明標量變量」

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 

我得到了以下錯誤:

Must declare the scalar variable '@address'

在這一點上,我完全糊塗了,因爲我已經在執行insert語句之前聲明的變量@address。是因爲我遍歷不同的數據庫嗎?

截至目前,我只是爲了完成任務而將實際值放在insert聲明中,但我想知道是什麼導致了錯誤。

回答

18

變量@address只存在於其定義的批處理中,批處理由go語句分隔,它超出了範圍。

試試這個:

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

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

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

啊,好的。批量作用域由'go'語句終止。現在我明白了!這是一個微妙的錯誤:S。 – OnesimusUnbound

2

這是因爲你使用的是聲明變量的聲明和使用它的語句之間go

go命令不是SQL命令,它是Management Studio中會話之間的分隔符。只需刪除查詢中的所有go命令,並且可以一直使用該變量。

3

這是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)