我创建了一个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
语句中,不过我想知道导致错误的原因。
答案 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
命令,就可以一直使用变量。