PowerShell के साथ आप Invoke-Sqlcmd को Export-Csv में पाइप करके समस्या को बड़े करीने से हल कर सकते हैं।
#Requires -Module SqlServer
Invoke-Sqlcmd -Query "SELECT * FROM DimDate;" `
-Database AdventureWorksDW2012 `
-Server localhost |
Export-Csv -NoTypeInformation `
-Path "DimDate.csv" `
-Encoding UTF8
SQL सर्वर 2016 में SqlServer मॉड्यूल शामिल है Invoke-Sqlcmd
, जिसमें cmdlet शामिल है , जो आपके पास सिर्फ SSMS 2016 स्थापित होने पर भी होगा। इससे पहले, SQL Server 2012 में पुराने SQLPS मॉड्यूल शामिल थे , जो वर्तमान निर्देशिका को SQLSERVER:\
तब बदल देगा जब मॉड्यूल था पहले (अन्य बग्स के बीच) इसके लिए इस्तेमाल किया गया था, आपको #Requires
ऊपर दी गई लाइन को बदलना होगा :
Push-Location $PWD
Import-Module -Name SQLPS
# dummy query to catch initial surprise directory change
Invoke-Sqlcmd -Query "SELECT 1" `
-Database AdventureWorksDW2012 `
-Server localhost |Out-Null
Pop-Location
# actual Invoke-Sqlcmd |Export-Csv pipeline
SQL Server 2008 और 2008 R2 के लिए उदाहरण को अनुकूलित करने के लिए, #Requires
लाइन को पूरी तरह से हटा दें और मानक PowerShell होस्ट के बजाय sqlps.exe सुविधा का उपयोग करें ।
Invoke-Sqlcmd sqlcmd.exe के पॉवरशेल के बराबर है। पाठ के बजाय यह System.Data.DataRow वस्तुओं को आउटपुट करता है।
-Query
पैरामीटर की तरह काम करता -Q
sqlcmd.exe के पैरामीटर। इसे SQL क्वेरी पास करें जो उस डेटा का वर्णन करती है जिसे आप निर्यात करना चाहते हैं।
-Database
पैरामीटर की तरह काम करता -d
sqlcmd.exe के पैरामीटर। इसे उस डेटाबेस का नाम दें जिसमें निर्यात किया जाने वाला डेटा है।
-Server
पैरामीटर की तरह काम करता -S
sqlcmd.exe के पैरामीटर। इसे उस सर्वर का नाम दें जिसमें निर्यात किया जाने वाला डेटा है।
Export-CSV एक PowerShell cmdlet है जो CSV में सामान्य वस्तुओं को क्रमबद्ध करता है। यह PowerShell के साथ जहाज करता है।
-NoTypeInformation
पैरामीटर अतिरिक्त उत्पादन है कि सीएसवी प्रारूप का हिस्सा नहीं है दबा देता है। डिफ़ॉल्ट रूप से cmdlet एक हेडर टाइप जानकारी के साथ लिखता है। यह आपको उस वस्तु के प्रकार को जानने देता है जब आप इसे बाद में इसके साथ डिसेर्बलाइज करते हैं Import-Csv
, लेकिन यह उन टूल्स को भ्रमित करता है जो मानक CSV की अपेक्षा करते हैं।
-Path
पैरामीटर की तरह काम करता -o
sqlcmd.exe के पैरामीटर। यदि आप पुराने SQLPS मॉड्यूल का उपयोग कर रहे हैं, तो इस मान के लिए एक पूर्ण पथ सबसे सुरक्षित है ।
-Encoding
पैरामीटर की तरह काम करता -f
या -u
sqlcmd.exe के मापदंडों। डिफ़ॉल्ट रूप से Export-Csv केवल ASCII वर्णों को आउटपुट करता है और अन्य सभी को प्रश्नवाचक चिन्ह से बदल देता है। सभी वर्णों को संरक्षित करने और अधिकांश अन्य उपकरणों के साथ संगत रहने के बजाय UTF8 का उपयोग करें।
Sqlcmd.exe या bcp.exe पर इस समाधान का मुख्य लाभ यह है कि आपको मान्य CSV आउटपुट के लिए कमांड को हैक करने की आवश्यकता नहीं है। निर्यात-सीएसवी cmdlet यह सब आपके लिए संभालता है।
मुख्य नुकसान यह है कि Invoke-Sqlcmd
पाइपलाइन के साथ गुजरने से पहले पूरे परिणाम सेट को पढ़ता है। सुनिश्चित करें कि आपके पास उस संपूर्ण परिणाम के लिए पर्याप्त मेमोरी है जिसे आप निर्यात करना चाहते हैं।
यह अरबों पंक्तियों के लिए आसानी से काम नहीं कर सकता है। यदि यह समस्या है, तो आप अन्य टूल आज़मा सकते हैं, या System.Data.SqlClient.SqlDataReader वर्ग का Invoke-Sqlcmd
उपयोग करके अपने स्वयं के कुशल संस्करण को रोल कर सकते हैं ।