[ भाग 1 | भाग 2 | भाग 3 ]
इस श्रृंखला के भाग 1 और भाग 2 में, मैंने ParamParser:एक PowerShell मॉड्यूल पेश किया जो पैरामीटर जानकारी को पार्स करने में मदद करता है - डिफ़ॉल्ट मानों सहित - संग्रहीत प्रक्रियाओं और उपयोगकर्ता-परिभाषित कार्यों से, क्योंकि SQL सर्वर हमारे लिए ऐसा नहीं करने जा रहा है।
कोड के पहले कुछ पुनरावृत्तियों में, मेरे पास बस एक .ps1 फ़ाइल थी जो आपको एक या अधिक मॉड्यूल बॉडी को हार्ड-कोडेड $procedure
में पेस्ट करने की अनुमति देती थी। चर। उन शुरुआती संस्करणों में बहुत कुछ गायब था, लेकिन हमने अब तक कई चीजों को संबोधित किया है:
- यह अब एक उचित मॉड्यूल है - आप
Import-Module .\ParamParser.psm1
चला सकते हैं और फिरGet-ParsedParams
. को कॉल करें पूरे सत्र में कार्य करना (मॉड्यूल से प्राप्त होने वाले अन्य लाभों के अतिरिक्त)। यह एक मामूली रूपांतरण नहीं था - विल व्हाइट के लिए फिर से यश। - उपयोगकर्ता-परिभाषित फ़ंक्शन समर्थन - मैंने भाग 2 में समझाया कि कैसे कार्य नामों को प्रक्रिया नामों की तुलना में पार्स करना कठिन होता है; कोड अब इसे ठीक से संभालता है।
- ScriptDom.dll को स्वचालित करना - हमें इस कुंजी फ़ाइल को पुनर्वितरित करने की अनुमति नहीं है, और क्योंकि यदि आपके पास यह नहीं है (या पुराना संस्करण है) तो आप मुद्दों को हिट कर सकते हैं,
init.ps1
बनाया जाएगा , जो स्वचालित रूप से नवीनतम संस्करण (वर्तमान में 150.4573.2) को डाउनलोड और निकालता है और इसे अन्य फाइलों के समान फ़ोल्डर में रखता है। - अतिरिक्त स्रोत - यदि आप चाहें तो आप अभी भी एक कच्चे स्क्रिप्ट ब्लॉक में पास कर सकते हैं, लेकिन अब आप कई उदाहरणों और डेटाबेस को स्रोतों के रूप में उपयोग कर सकते हैं, एक या अधिक फ़ाइलों को सीधे संदर्भित कर सकते हैं, या सभी
.sql
में खींच सकते हैं। एक या अधिक निर्देशिकाओं से फ़ाइलें। मैं नीचे कुछ उदाहरण सिंटैक्स दिखाऊंगा। - आउटपुट स्रोत को इंगित करता है - चूंकि आप एक कॉल में कई फाइलों या डेटाबेस को संसाधित कर सकते हैं, और आपके पास एक ही नाम के साथ कई ऑब्जेक्ट हो सकते हैं, जिसमें स्रोत भी शामिल है जो स्पष्ट करने में मदद करता है। यदि आपके पास
CREATE PROCEDURE dbo.blat ...
के दो उदाहरण हैं, तो मैं बहुत कुछ नहीं कर सकता एक ही फ़ाइल या कच्ची स्क्रिप्ट में, और यदि आप-Script
. का उपयोग करते हैं तो स्रोत का संकेत भी नहीं दिया जाता है और एक स्ट्रिंग में पास करें। - बेहतर आउटपुट - आप अभी भी कंसोल पर सब कुछ डंप कर सकते हैं, लेकिन आप
Out-GridView
. का भी उपयोग कर सकते हैं परिणामों को ग्रिड प्रारूप में देखने के लिए (यहां एडवेंचरवर्क्स2019 से एक उबाऊ उदाहरण है), या कहीं और खपत के लिए पैरामीटर जानकारी को डेटाबेस में लॉग करें।
डाउनलोड करने और सेट अप करने के लिए रीडमी में दिए गए निर्देशों का पालन करें। एक बार जब आप रिपॉजिटरी को क्लोन कर लेते हैं, तो .\init.ps1
run चलाएं और फिर Import-Module .\ParamParser.psm1
. एक साधारण उदाहरण के साथ इसका परीक्षण करें, जैसे:
Get-ParsedParams -Script "CREATE PROCEDURE dbo.a @b int = 5 out AS PRINT 1;" -GridView
आउटपुट (विस्तार करने के लिए क्लिक करें):
हालांकि, कई अन्य पैरामीटर संयोजन भी हैं। हेल्प हेडर संभावित सिंटैक्स का एक अच्छा हिस्सा दिखाता है (और यहां बहुत सारी अद्भुत सफाई के लिए विल को फिर से धन्यवाद):
Get-ParsedParams -?
परिणाम:
Get-ParsedParams [-Script]गेट-पार्स्ड पैराम्स [-फाइल] ] {एसक्यूएल | विंडोज}] [<कॉमनपैरामीटर>]
गेट-पार्स्ड पैराम्स [-डायरेक्टरी] <स्ट्रिंग []> [[-ग्रिड व्यू]] [[-कंसोल]] [[-लॉगटोडेटाबेस]] [[-LogToDBAuthenticationMode ] {एसक्यूएल | विंडोज}] [<कॉमनपैरामीटर>]
गेट-पार्स्ड पैराम्स [-सर्वर इंस्टेंस] <स्ट्रिंग []> [-डेटाबेस] <स्ट्रिंग []> [[-ऑथेंटिकेशन मोड] {एसक्यूएल | विंडोज़}] [[-ग्रिड व्यू]] [[-कंसोल]] [[-लॉगटोडेटाबेस]] [[-लॉगटोडीबी प्रमाणीकरण मोड] {एसक्यूएल | विंडोज़}] [<कॉमन पैरामीटर्स>]
कुछ और उदाहरण
c:\temp\db.sql
. में सभी ऑब्जेक्ट को पार्स करने के लिए :
Get-ParsedParams -File "C:\temp\db.sql" -GridView
c:\temp\scripts\
. में सभी .sql फाइलों को पार्स करने के लिए (पुनरावर्ती) और h:\sql\
(पुनरावर्ती भी):
Get-ParsedParams -Directory "C:\temp\scripts\", "H:\sql\" -GridView
msdb
. में सभी ऑब्जेक्ट को पार्स करने के लिए स्थानीय नामित उदाहरण पर SQL2019
Windows प्रमाणीकरण का उपयोग करना:
Get-ParsedParams -ServerInstance ".\SQL2019" -Database "msdb" -GridView
msdb
. में सभी ऑब्जेक्ट को पार्स करने के लिए , floob
, और AdventureWorks2019
स्थानीय नामित उदाहरण पर SQL2019
और SQL प्रमाणीकरण क्रेडेंशियल के लिए संकेत प्राप्त करें:
Get-ParsedParams -ServerInstance ".\SQL2019" -Database "msdb","floob","AdventureWorks" -AuthenticationMode "SQL" -GridView
msdb
. में सभी ऑब्जेक्ट को पार्स करने के लिए स्थानीय नामित उदाहरण पर SQL2019
और SQL प्रमाणीकरण क्रेडेंशियल में पास करें:
$password = ConvertTo-SecureString -AsPlainText -Force -String "Str0ngP@ssw0rd" $credential = New-Object -TypeName "PSCredential" -ArgumentList "SQLAuthUsername", $password Get-ParsedParams -ServerInstance ".\SQL2019" -Database "msdb" -AuthenticationMode "SQL" -SqlCredential $credential -GridView
c:\temp\scripts\
. में सभी .sql फाइलों को पार्स करने के लिए (पुनरावर्ती), और परिणामों को स्थानीय नामित उदाहरण में एक तालिका में रखें SQL2019
डेटाबेस में, Utility
, जहां आपने पहले ही dbo.ParameterSetTVP
. बना लिया है , dbo.LogParameters
, आदि, Windows प्रमाणीकरण का उपयोग कर:
Get-ParsedParams -Directory "C:\temp\scripts" -LogToDatabase -LogToDBServerInstance ".\SQL2019" -LogToDBDatabase "Utility"
msdb
. में सभी ऑब्जेक्ट को पार्स करने के लिए स्थानीय नामित उदाहरण पर SQL2019
और Utility
को लिखें एक ही उदाहरण पर डेटाबेस, समान SQL प्रमाणीकरण क्रेडेंशियल का उपयोग करते हुए:
$password = ConvertTo-SecureString -AsPlainText -Force -String "Str0ngP@ssw0rd" $credential = New-Object -TypeName "PSCredential" -ArgumentList "SQLAuthUsername", $password Get-ParsedParams -ServerInstance ".\SQL2019" -Database "msdb" -AuthenticationMode "SQL" -SqlCredential $credential -LogToDatabase ` -LogToDBServerInstance ".\SQL2019" -LogToDBDatabase "Utility" -LogToDBAuthenticationMode "SQL" -LogToDBSqlCredential $credential
यह गड़बड़ होने लगता है, लेकिन उम्मीद है कि आप इसे स्वचालित कर रहे हैं, और इसे हर बार हाथ से टाइप नहीं कर रहे हैं।
अगली बार
हमेशा की तरह, और भी सुधार किए जा सकते हैं। मुझे उन पैरामीटर नामों को पसंद नहीं है जिनके साथ मैं आया हूं, लेकिन मुझे लगता है कि और भी महत्वपूर्ण सुधार हैं, जैसे कि त्रुटि प्रबंधन और एक्स्टेंसिबिलिटी जो किया जाना चाहिए। कोई सुझाव? कृपया मुझे बताएं या, बेहतर अभी तक, योगदान दें!
[ भाग 1 | भाग 2 | भाग 3 ]