错误:“必须为多个数据库中的insert语句声明标量变量”

时间:2011-08-16 10:31:19

标签: sql sql-server sql-server-2005 scope

我创建了一个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

我收到以下错误:

  

必须声明标量变量'@address'

此时,我完全感到困惑,因为我在执行@address语句之前声明了变量insert。是因为我正在遍历不同的数据库吗?

截至目前,我只是为了完成任务而将实际值放在insert语句中,不过我想知道导致错误的原因。

3 个答案:

答案 0 :(得分:22)

变量@address只存在于其定义的批处理中,批处理由go语句分隔,超出范围。

试试这个:

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

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

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

答案 1 :(得分:3)

这是GO声明。

  

所有局部变量声明必须分组在一个批处理中。   这是通过在最后一个语句之后没有GO命令来完成的   引用变量。   (from MSDN

答案 2 :(得分:2)

这是因为你在声明变量的语句和使用它的语句之间使用go

go命令不是SQL命令,它是Management Studio中会话之间的分隔符。只需删除查询中的所有go命令,就可以一直使用变量。