2011-08-16 6 views
9

Tôi đã tạo tập lệnh SQL để thêm mục nhập trong cơ sở dữ liệu khác. Tuy nhiên, khi tôi chạy kịch bản thông qua SQL Server Management Studio.Lỗi: "Phải khai báo biến vô hướng" để chèn câu lệnh trong nhiều cơ sở dữ liệu

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 

Tôi đã nhận lỗi sau:

Must declare the scalar variable '@address'

Tại thời điểm này, tôi hoàn toàn bối rối vì tôi đã khai báo biến @address trước khi thực hiện báo cáo kết quả insert. Có phải vì tôi đang đi qua cơ sở dữ liệu khác nhau?

Hiện tại, tôi vừa đặt giá trị thực tế vào câu lệnh insert chỉ để hoàn thành tác vụ, mặc dù tôi tự hỏi điều gì đã gây ra lỗi.

Trả lời

18

biến @address chỉ sống trong lô được xác định trong, các lô được phân tách bằng câu lệnh đi, nơi nó nằm ngoài phạm vi.

thử điều này:

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

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

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

Ah, ok. Phạm vi lô được chấm dứt bằng câu lệnh 'go'. Bây giờ, tôi biết! Đó là một lỗi nhỏ: S. – OnesimusUnbound

2

Đó là bởi vì bạn đang sử dụng go giữa báo cáo kết quả khai báo biến và tuyên bố rằng sử dụng nó.

Lệnh go không phải là lệnh SQL, đó là dấu phân tách giữa các phiên trong Management Studio. Chỉ cần xóa tất cả các lệnh go trong truy vấn của bạn và bạn có thể sử dụng biến tất cả.

3

Đó là câu lệnh 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)