मैंने कुछ और शोध किया है, इसलिए अब तक जो लिखा गया है उसे विस्तारित करने के लिए इसकी मेरी समझ यहां दी गई है:
एसक्यूएलसीएमडी क्या है
SQLCMD.exe
SQL सर्वर 2005 और उच्चतर की स्थापना में शामिल एक कंसोल उपयोगिता है। आप इसे आमतौर पर c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE
जैसे पथ में ढूंढ सकते हैं। ।
यह एक सरल स्क्रिप्टिंग वातावरण है जो SQL सर्वर से संबंधित कार्यों के स्वचालन की अनुमति देता है। उदाहरण के लिए, आप एक स्क्रिप्ट लिख सकते हैं और निष्पादित कर सकते हैं जो SQL सर्वर के एक विशिष्ट उदाहरण में लॉगिन करेगा, इस कनेक्शन पर किसी दिए गए निर्देशिका से स्क्रिप्ट निष्पादित करेगा और आउटपुट को एक निर्दिष्ट फ़ाइल में संग्रहीत करेगा।
Invoke-Sqlcmd
cmdlet को SQL Server 2008 के साथ इस उपकरण को एक मानकीकृत, Powershell-आधारित दृष्टिकोण के साथ बदलने के लिए एक साधन के रूप में पेश किया गया था, जिसमें अधिकांश मूल सिंटैक्स और कार्यक्षमता को संरक्षित किया गया था।
SSMS में SQLCMD मोड क्या है
SSMS में, SQLCMD मोड एक स्क्रिप्ट निष्पादन मोड है जो sqlcmd.exe वातावरण का अनुकरण करता है और इसलिए कुछ आदेशों को स्वीकार करता है जो T-SQL भाषा का हिस्सा नहीं हैं। sqlcmd.exe
के विपरीत , यह SqlClient . का उपयोग करके डेटाबेस से संपर्क करता है (उसी तरह SSMS), नहीं ODBC डेटा प्रदाता, इसलिए कुछ पहलुओं में इसका व्यवहार sqlcmd.exe
. से भिन्न हो सकता है ।
SQLCMD मोड में स्क्रिप्ट निष्पादित करना sqlcmd.exe
के लिए विशिष्ट कमांड का उपयोग करने की अनुमति देता है वातावरण। हालाँकि, SQLCMD मोड के लिए कोई IntelliSense या डिबगिंग समर्थन नहीं है, इसलिए SQLCMD- विशिष्ट कोड के साथ स्वच्छ T-SQL को मिलाने वाली स्क्रिप्ट को बनाए रखना एक दर्द हो सकता है। इसलिए, इसका उपयोग तभी किया जाना चाहिए जब यह आवश्यक हो।
उदाहरण उपयोग केस
मान लें कि किसी कंपनी के पास डेटाबेस के लिए नामकरण परंपरा है जिसमें नाम में पर्यावरण शामिल है, उदाहरण के लिए:MyDb_उत्पाद , MyDb_परीक्षण , MyDb_देव . इस कन्वेंशन का उपयोग गलतियों की संभावना को कम करने के लिए किया जा सकता है। ।
जब कोई डेवलपर टी-एसक्यूएल स्क्रिप्ट लिखता है, तो उसे परिनियोजन/परीक्षण प्रक्रिया में विभिन्न वातावरणों में निष्पादित करना होगा, जिसके लिए कोड के कई संस्करणों की आवश्यकता होगी:
SELECT *
FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod
इसके बजाय, हम यह मान सकते हैं कि डेटाबेस नाम को परिनियोजन प्रक्रिया में SQLCMD चर के रूप में प्रदान किया जाएगा और सभी परिवेशों में ठीक उसी फ़ाइल को परिनियोजित किया जाएगा:
-- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS
SELECT *
FROM [$(databaseName)].[dbo].[MyTable1]
(इस सरल उदाहरण में डेटाबेस नाम को पूरी तरह से छोड़ा जा सकता है, लेकिन यदि आपके पास क्रॉस-डेटाबेस जॉइन है, तो डेटाबेस नाम का उपयोग करना आवश्यक है)