Ошибка: «Необходимо объявить скалярную переменную» для операторов вставки в нескольких базах данных - PullRequest
11 голосов
/ 16 августа 2011

Я создал 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 ]

22 голосов
/ 16 августа 2011

переменная @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 голосов
/ 16 августа 2011

Это утверждение GO.

все объявления локальных переменных должны быть сгруппированы в один пакет. Это сделано, не имея команды GO, пока после последнего утверждения который ссылается на переменную. ( из MSDN )

2 голосов
/ 16 августа 2011

Это потому, что вы используете go между оператором, который объявляет переменную, и оператором, который ее использует.

Команда go - это не команда SQL, а разделитель между сеансами в Management Studio. Просто удалите все команды go в своем запросе, и вы сможете использовать переменную полностью.

...