আমি কীভাবে এসকিউএল সার্ভার ২০০৮ সালে একটি সিএসভি ফাইলে কোনও ক্যোয়ারী ফলাফল রফতানি করতে পারি?
আমি কীভাবে এসকিউএল সার্ভার ২০০৮ সালে একটি সিএসভি ফাইলে কোনও ক্যোয়ারী ফলাফল রফতানি করতে পারি?
উত্তর:
নীচে, এখানে চিত্রটির একটি পূর্ণ স্ক্রিন সংস্করণ's
এটি আপনার ক্যোয়ারী ফলাফলগুলি কমা-বিস্মৃত পাঠ্য হিসাবে দেখাবে।
একটি ক্যোয়ারির ফলাফলগুলি একটি ফাইলে সংরক্ষণ করতে: Ctrl + Shift + F
Ctrl+Shift+F
, এটি কেবলমাত্র আউটপুট মোড পরিবর্তন করে, যদি আপনি ইতিমধ্যে ক্যোয়ারী চালিয়ে যান তবে ফলাফলগুলিকে প্রভাবিত করে না। এটি প্রতিবিম্বিত হওয়ার জন্য আপনাকে কোয়েরিটি আবার চালাতে হবে। আপনি যখন এটি "ফলাফলের জন্য ফাইল" মোডে চালান, এটি আপনাকে ফলাফলগুলি কোথায় সংরক্ষণ করতে চান তা জিজ্ঞাসা করা উচিত।
আমি জানি এটি কিছুটা পুরানো, তবে এখানে একটি আরও সহজ উপায় ...
ডিফল্ট সেটিংস দিয়ে আপনার ক্যোয়ারি চালান (গ্রিড ফর্ম্যাটে ফলাফল রাখে, যদি আপনার গ্রিড ফর্ম্যাটে না থাকে তবে নীচে দেখুন)
গ্রিডের ফলাফলগুলিতে ডান ক্লিক করুন এবং "ফলাফল হিসাবে সংরক্ষণ করুন" এ ক্লিক করুন এবং এটি সংরক্ষণ করুন।
যদি আপনার ফলাফলগুলি গ্রিড ফর্ম্যাটে না থাকে, আপনি যেখানে ক্যোয়ারীটি লেখেন সেখানে ডান ক্লিক করুন, "ফলাফলগুলিতে" হোভার করুন এবং "ফলাফলগুলিতে গ্রিডে" ক্লিক করুন
আপনি কলাম শিরোনাম ক্যাপচার না সচেতন হন!
শুভকামনা!
আপনি পাওয়ারশেল ব্যবহার করতে পারেন
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
এবং Add-PSSnapin SqlServerProviderSnapin100
।
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
স্কেল সার্ভার মডিউলটি ইনস্টল করার দরকার ছিল: (তবে সেই সিএমডলেটগুলি স্ন্যাপ করার দরকার নেই)। এছাড়াও, আমি একটি স্ক্রিপ্টের মধ্যে কমান্ড, যা শেষ করা যাবে না যতক্ষণ না আমি ফাঁসি নীতি পরিবর্তন চাই সংরক্ষিত চাই: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
।
RemoteSigned
এক্ষেত্রে একটি কার্যকর করার নীতিই যথেষ্ট।
যদি প্রশ্নে থাকা ডাটাবেস স্থানীয় হয়, তবে কোনও সিএসভি ফাইলে ক্যোরির ফলাফল রফতানি করার জন্য নিম্নলিখিতটি সম্ভবত সবচেয়ে শক্তিশালী উপায় (এটি আপনাকে সবচেয়ে নিয়ন্ত্রণ প্রদান করছে)।
এই প্রক্রিয়াটি নিখরচায় যাওয়ার পরে, আমি নিম্নলিখিতটি সর্বোত্তম বিকল্প হিসাবে খুঁজে পেয়েছি
পাওয়ারশেল স্ক্রিপ্ট
$dbname = "**YOUR_DB_NAME_WITHOUT_STARS**"
$AttachmentPath = "c:\\export.csv"
$QueryFmt= @"
**YOUR_QUERY_WITHOUT_STARS**
"@
Invoke-Sqlcmd -ServerInstance **SERVER_NAME_WITHOUT_STARS** -Database $dbname -Query $QueryFmt | Export-CSV $AttachmentPath -NoTypeInformation
অ্যাডমিন হিসাবে পাওয়ারশেল চালান
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
এনএস এর উত্তরের ভিত্তিতে, আমার একটি পাওয়ারশেল স্ক্রিপ্ট রয়েছে যা ক্ষেত্রের চারপাশে উদ্ধৃতি চিহ্ন এবং কমা বিচ্ছিন্ন করে একটি সিএসভি ফাইলে রফতানি করে এবং ফাইলটিতে শিরোনামের তথ্য এড়িয়ে যায়।
add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100
$qry = @"
Select
*
From
tablename
"@
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $qry | convertto-CSV -notype | select -skip 1 > "full path and filename.csv"
প্রথম দুটি লাইন ইনভোক-এসকিএলসিএমডি কমান্ড- লেটটি ব্যবহার করার ক্ষমতা সক্ষম করে ।
টি-এসকিউএল ব্যবহার করুন :
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
তবে, এখানে বেশ কয়েকটা সতর্কতা রয়েছে:
আপনার Microsoft.ACE.OLEDB.12.0 সরবরাহকারী উপলব্ধ থাকতে হবে। জেট provider.০ সরবরাহকারীও কাজ করবে, তবে এটি প্রাচীন, সুতরাং আমি পরিবর্তে এটি ব্যবহার করেছি used
.CSV ফাইলটি ইতিমধ্যে বিদ্যমান থাকতে হবে। যদি আপনি শিরোনাম ( HDR=YES
) ব্যবহার করে থাকেন তবে নিশ্চিত করুন যে .CSV ফাইলের প্রথম লাইনটি সমস্ত ক্ষেত্রের একটি সীমিত তালিকা।
সিএসভিতে রফতানি করার জন্য নেটিভ এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও কৌশলটি ব্যবহার করা (যেমন @ 8 কেবি প্রস্তাবিত) আপনার মানগুলিতে কমা থাকলে তা কার্যকর হয় না, কারণ এসএসএমএস ডাবল কোটে মানগুলিকে মোড়া করে না। আমার পক্ষে আরও শক্তিশালী উপায়টি হ'ল ফলগুলি অনুলিপি করা (গ্রিডের ভিতরে ক্লিক করুন এবং তারপরে CTRL-A, CTRL-C) এবং এটি এক্সলে আটকানো Excel তারপরে এক্সেল থেকে সিএসভি ফাইল হিসাবে সংরক্ষণ করুন।
আপনি কোয়েরিটোডক ( http://www.querytodoc.com ) ব্যবহার করতে পারেন । এটি আপনাকে একটি এসকিউএল ডাটাবেসের বিরুদ্ধে একটি কোয়েরি লিখতে এবং এক্সেল, ওয়ার্ড, এইচটিএমএল বা সিএসভিতে ডিলিমেটারটি চয়ন করার পরে - ফলাফলগুলি রফতানি করতে দেয়
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
যেহেতু @ স্লগমিস্টার এক্সট্রাওর্ডিনায়ার উদ্ধৃতটি সঠিক is
1 টি ফাইল কলাম 2 এর সাথে ইতিমধ্যে উপস্থিত থাকতে হবে> একটিতে অফিস ইনস্টল থাকা দরকার
ত্রুটির মুখোমুখি
এমএসজি 7303, স্তর 16, রাজ্য 1, লাইন 1 ওএলই ডিবি সরবরাহকারী "মাইক্রোসফ্ট.এসিই.ওএলডিবি .১.০" "লিঙ্কযুক্ত সার্ভারের জন্য" (নাল) "ডেটা উত্স অবজেক্টটি আরম্ভ করতে পারে না।"
এমএসজি 15281, স্তর 16, রাজ্য 1, লাইন 1 এসকিউএল সার্ভার স্টেটম্যান্ট 'ওপেনরউসেট / ওপেনড্যাটাসোর্স' উপাদান 'অ্যাডহক ডিস্ট্রিবিউটড ক্যোয়ারী'-এর অ্যাক্সেসকে অবরুদ্ধ করেছে কারণ এই সার্ভারের সুরক্ষা কনফিগারেশনের অংশ হিসাবে এই উপাদানটি বন্ধ রয়েছে। কোনও সিস্টেম অ্যাডমিনিস্ট্রেটর sp_configure ব্যবহার করে 'অ্যাডহক বিতরণ ক্যোয়ারী' ব্যবহার সক্ষম করতে পারে। 'অ্যাডহাক ডিস্ট্রিবিউটড ক্যোয়ারীস' সক্ষম করার বিষয়ে আরও তথ্যের জন্য, এসকিউএল সার্ভার বুকস অনলাইনে 'অ্যাডহক বিতরণ প্রশ্নাবলী' অনুসন্ধান করুন।
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
আপনি যদি পাওয়ারশেল ব্যবহার করতে না চান তবে এই উত্তরটি 8 কেবি এর দুর্দান্ত উত্তরের একটি প্রকরণ। পার্থক্যটি হ'ল সিএসভি আউটপুট ফর্ম্যাট হিসাবে নির্বাচন করার পরিবর্তে, ট্যাব ডিলিমেটেড নির্বাচন করুন। এই উপায়ে যদি আপনার ডেটাতে কমা থাকে তবে এটি এক্সেলের সেলগুলি এড়িয়ে যাবে না। এছাড়াও, যদি আপনার এক্সেলের ডিফল্ট ডিলিমিটারটি ট্যাবগুলিতে সেট করা থাকে তবে আপনি কেবল এসএসএমএস ক্যোয়ারী ফলাফলগুলির একটি অনুলিপি করতে পারেন (সিটিআরএল-এ, সিটিআরএল-সি) এবং এক্সেলের মধ্যে পেস্ট করতে পারেন (ফাইল হিসাবে সংরক্ষণের প্রয়োজন নেই এবং এক্সেলটিতে আমদানি করার দরকার নেই ):
এখন আপনি আপনার ক্যোয়ারীটি কার্যকর করতে পারেন, তারপরে সমস্ত ফলাফল নির্বাচন করতে একটি CTRL-A করুন, তারপরে ক্লিপবোর্ডে অনুলিপি করতে CTRL-C করুন, তারপরে এক্সেল 2013 এ স্যুইচ করুন (2007 সালেও এটি কাজ করতে পারে, নিশ্চিত নয়) এবং পেস্ট করুন - এক্সেলের ডিফল্ট ধরে ধরে ডিলিমিটারটি ট্যাবে সেট করা আছে।
হ্যাঁ, আপনি যখন সার্ভারগুলিতে সরাসরি অ্যাক্সেস পাবেন তখন এগুলি সবই সম্ভব। তবে আপনি যদি কেবল ওয়েব / অ্যাপ্লিকেশন সার্ভার থেকে সার্ভারটিতে অ্যাক্সেস পেয়ে থাকেন? ভাল, পরিস্থিতিটি আমাদের অনেক আগে থেকেই ছিল এবং সমাধানটি ছিল সিএসভিতে এসকিউএল সার্ভার রফতানি ।