SQLCMD मोड में चर सेट करना


13

SQL Server 2008 R2 एंटरप्राइज़ संस्करण का उपयोग करना

निम्नलिखित कथन पर विचार करें:

:setvar source_server_name "SERVERNAME\INSTANCENAME"

क्या SQLQL मोड में TSQL का उपयोग कर उस मूल्य को प्राप्त करना संभव है

कुछ इस तरह: :setvar source_server_name = SELECT @@servername

धन्यवाद

अपडेट 7/15/2013

नीचे दिए गए दो जवाबों ने वांछित परिणाम नहीं दिया, इसलिए मैं एक अधिक प्रासंगिक परीक्षा जोड़ रहा हूं।

:setvar source_server_name [myserver]

चर source_server_name पाठ स्ट्रिंग पर सेट है [myserver_1]

मैं ऐसा करने में सक्षम होना चाहता हूं:

create table #tmp(
id int identity(1,1),
server sysname
)

insert into #tmp values('myserver_1'),('myserver_2');

:setvar source_server_name = SELECT server FROM #tmp WHERE id = 1

select '$(source_server_name)' 

(No column name)
myserver_1

वैरिएबल source_server_name को id 1 के सर्वर में मान पर सेट किया जाएगा।


ऐसा नहीं है कि मैं इसके बारे में जानता हूं, या इसका पता लगा सकता हूं।

1
आप जो पूछते हैं वह प्रति-से संभव नहीं है, क्योंकि sqlcmd वेरिएबल्स का मूल्यांकन क्लाइंट द्वारा किया जाता है, क्योंकि sql को कभी भी सर्वर पर भेजा जाता है। तो आप एक चर के मान को सेट करने के लिए sql सर्वर से पूछ रहे हैं जिसे वह कभी नहीं देखता है। Sqlcmd चर के साथ एक sql स्क्रिप्ट पर एक sql प्रोफाइलर ट्रेस चलाएँ और आप देखेंगे कि वे सभी का मूल्यांकन पहले ही कर चुके हैं।
टिम अबेल

जवाबों:


9

मुझे लगता है कि आपको अपने परिणामों को एक फ़ाइल में आउटपुट करने और उन्हें वापस लाने की आवश्यकता है। कुछ इस तरह से आपको जो आप देख रहे हैं, उसके करीब पहुंचने में मदद करनी चाहिए:

:setvar MyDir "C:\scripts"
:OUT $(MyDir)\test.txt
PRINT ':SETVAR ServerName ''' + @@SERVERNAME + ''''
GO
:OUT stdout
:r $(MyDir)\test.txt
GO
SELECT $(ServerName)

आप यहां और उदाहरण देख सकते हैं


धन्यवाद। Ive ने पहले से ही काम छोड़ दिया है इसलिए मैं आपके सुझाव को सोमवार को
आजमाऊंगा

मैंने अपना प्रश्न अपडेट किया है
क्रेग एफ्रेइन

यह उत्तर सबसे उपयोगी साबित हुआ।
क्रेग एफ्रेइन

1
मुझे लगता है कि यहाँ महत्वपूर्ण भाग यह है कि आपके पास अलग-अलग बैचों के लिए 1 है) SETVAR फ़ाइल जनरेट करें, 2) स्क्रिप्ट वेरिएबल को इनिशियलाइज़ करने के लिए इसे निष्पादित करें, और अंत में, 3) स्क्रिप्ट वेरिएबल का उपयोग करें।
एंड्री एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.