2011-08-16 19 views
9

में सम्मिलित विवरणों के लिए "स्केलर चर घोषित करना चाहिए" मैंने विभिन्न डेटाबेस में एक प्रविष्टि जोड़ने के लिए एक SQL स्क्रिप्ट बनाई है। हालांकि, जब मैं SQL सर्वर प्रबंधन स्टूडियो के माध्यम से स्क्रिप्ट चलाता हूं।त्रुटि: एकाधिक डेटाबेस

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 

मैं निम्नलिखित त्रुटि मिली: इस बिंदु पर

Must declare the scalar variable '@address'

, मैं पूरी तरह से भ्रमित क्योंकि मैं insert बयान निष्पादित करने से पहले चर @address घोषित किया है हूँ। क्या ऐसा इसलिए है क्योंकि मैं अलग-अलग डेटाबेस चला रहा हूं?

अभी तक, मैंने केवल कार्य को पूरा करने के लिए insert कथन में वास्तविक मान डाल दिया है, हालांकि मुझे आश्चर्य हुआ कि त्रुटि के कारण क्या हुआ।

उत्तर

18

परिवर्तनीय @address केवल बैच में रहता है जो इसकी परिभाषित करता है, बैचों को जाने वाले बयान द्वारा सीमित किया जाता है, जहां यह दायरे से बाहर हो जाता है।

इस प्रयास करें:

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

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

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

आह, ठीक है। बैच स्कोप 'go' कथन द्वारा समाप्त कर दिया गया है। अब मुझे पता है! यह एक सूक्ष्म त्रुटि है: एस। – OnesimusUnbound

2

क्योंकि आप बयान है कि चर वाणी और बयान यह का उपयोग करता है के बीच go उपयोग कर रहे हैं यह है।

go कमांड एक SQL कमांड नहीं है, यह प्रबंधन स्टूडियो में सत्रों के बीच एक विभाजक है। बस अपनी क्वेरी में सभी go कमांड को हटा दें, और आप चर का उपयोग कर सकते हैं।

3

यह गो स्टेटमेंट है।

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)

संबंधित मुद्दे