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

One*_*und 14 sql sql-server scope sql-server-2005

我创建了一个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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

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

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

Pre*_*gha 24

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

试试这个:

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

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

insert into DB2.dbo.Address
 values (@address)
go
Run Code Online (Sandbox Code Playgroud)

  • 喔好吧.批处理范围由`go`语句终止.现在我知道了!这是一个微妙的错误:S. (3认同)

Guf*_*ffa 5

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

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


Pao*_*lla 5

这是 GO 语句。

所有局部变量声明必须归为一个批次。这是通过在引用变量的最后一条语句之后才使用 GO 命令来完成的。(来自 MSDN