পাওয়ারশেলের সাহায্যে আপনি ইনভোক-এসকিএলসিএমডি এক্সপোর্ট-সিএসভিতে ঝরঝরে করে সমস্যার সমাধান করতে পারেন।
#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. আগে যে ইনস্টল হবে যা, এসকিউএল সার্ভার 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
এসকিউএল সার্ভার ২০০৮ এবং ২০০৮ আর ২-এর উদাহরণটি মানিয়ে নিতে, #Requires
পুরোপুরি লাইনটি সরিয়ে ফেলুন এবং স্ট্যান্ডার্ড পাওয়ারশেল হোস্টের পরিবর্তে sqlps.exe ইউটিলিটিটি ব্যবহার করুন ।
ইনভোক-এসকিউএলসিএমডি হ'ল স্কেলসিএমডি.এক্সির পাওয়ারশেল সমতুল্য। পাঠ্যের পরিবর্তে এটি সিস্টেম.ডাটা.ডাটাআরও বস্তুকে আউটপুট করে।
-Query
প্যারামিটার মত কাজ করে -Q
sqlcmd.exe এর প্যারামিটার। এটিকে একটি এসকিউএল কোয়েরি পাস করুন যা আপনি যে ডেটা রফতানি করতে চান তা বর্ণনা করে।
-Database
প্যারামিটার মত কাজ করে -d
sqlcmd.exe এর প্যারামিটার। এটি যে ডাটাবেসটিতে রফতানি করতে হবে তার নাম দিন।
-Server
প্যারামিটার মত কাজ করে -S
sqlcmd.exe এর প্যারামিটার। রফতানি করার জন্য ডেটা রয়েছে এমন সার্ভারের নাম এটি পাস করুন।
এক্সপোর্ট-সিএসভি হ'ল একটি পাওয়ারশেল সেমিডলেট যা জেনেরিক বস্তুগুলিকে সিএসভিতে সিরিয়ালাইজ করে। এটি পাওয়ারশেলের সাহায্যে চালিত হয়।
-NoTypeInformation
পরামিতি অতিরিক্ত আউটপুট CSV বিন্যাসে অংশ নয় শুষে নেবে। ডিফল্টরূপে cmdlet টাইপ তথ্য সহ একটি শিরোনাম লিখে writes এটি পরে যখন আপনি এটির ডিজাইরিয়াল করেন তখন এটি আপনাকে কীভাবে অবজেক্টের ধরণটি জানতে দেয় Import-Csv
তবে স্ট্যান্ডার্ড সিএসভি আশা করে এমন সরঞ্জামগুলিকে বিভ্রান্ত করে।
-Path
প্যারামিটার মত কাজ করে -o
sqlcmd.exe এর প্যারামিটার। আপনি যদি পুরানো এসকিউএলপিএস মডিউলটি ব্যবহার করে আটকে থাকেন তবে এই মানটির একটি পূর্ণ পথ সবচেয়ে নিরাপদ ।
-Encoding
প্যারামিটার মত কাজ করে -f
বা -u
sqlcmd.exe এর প্যারামিটার। ডিফল্টরূপে এক্সপোর্ট-সিএসভি কেবল ASCII অক্ষর আউটপুট দেয় এবং অন্য সকলকে প্রশ্ন চিহ্ন দিয়ে প্রতিস্থাপন করে। সমস্ত অক্ষর সংরক্ষণের জন্য UTF8 ব্যবহার করুন এবং অন্যান্য সরঞ্জামগুলির সাথে সামঞ্জস্যপূর্ণ থাকুন।
Sqlcmd.exe বা bcp.exe এর মাধ্যমে এই সমাধানটির প্রধান সুবিধাটি হ'ল আপনাকে বৈধ সিএসভি আউটপুট দেওয়ার আদেশটি হ্যাক করতে হবে না। এক্সপোর্ট-সিএসভি সেমিডিলেট এটি আপনার জন্য সমস্ত পরিচালনা করে।
মূল অসুবিধাটি হ'ল Invoke-Sqlcmd
পাইপলাইনটি পাশ করার আগে পুরো ফলাফল সেটটি পড়ে। আপনি রফতানি করতে চান পুরো ফলাফল সেট জন্য আপনার যথেষ্ট মেমরি আছে তা নিশ্চিত করুন।
এটি কয়েক বিলিয়ন সারিগুলির জন্য সহজে কাজ করতে পারে না। যদি সমস্যা হয় তবে আপনি অন্যান্য সরঞ্জাম ব্যবহার করে দেখতে পারেন, বা System.Data.SqlClient.SqlDataReader শ্রেণীর নিজস্ব দক্ষ সংস্করণ Invoke-Sqlcmd
ব্যবহার করতে পারেন ।