SQL Server 2008 में .csv फ़ाइल के लिए क्वेरी निर्यात करें


141

मैं SQL Server 2008 में .csv फ़ाइल के लिए क्वेरी परिणाम कैसे निर्यात कर सकता हूं?



क्या आपको अपने परिसीमन की आवश्यकता है जो बच गया है? अब तक के अधिकांश उत्तर यह मान लेते हैं कि आप वास्तव में वह सब नहीं हैं जो सी.एस.वी.
निक

@ निक - आम तौर पर सीमांकक केवल एक स्ट्रिंग के साथ समाहित होते हैं, और वे आम तौर पर उनके आसपास उद्धरण होते हैं। इसका समाधान देखने के लिए मेरा उत्तर देखें। stackoverflow.com/questions/6115054/…
MacGyver


मैं कभी-कभी Python
LV98

जवाबों:


168
  1. SQL सर्वर प्रबंधन स्टूडियो खोलें
  2. उपकरण> विकल्प> क्वेरी परिणाम> SQL सर्वर> परिणाम पाठ पर जाएं
  3. सबसे दाईं ओर, आउटपुट फॉर्मेट नामक एक ड्रॉप डाउन बॉक्स है
  4. कॉमा डिलीटेड चुनें और ओके पर क्लिक करें

यहाँ नीचे उस छवि का पूर्ण स्क्रीन संस्करण है

यहां छवि विवरण दर्ज करें

यह आपके क्वेरी परिणामों को कॉमा-सीमांकित पाठ के रूप में दिखाएगा।

किसी फ़ाइल के क्वेरी के परिणामों को सहेजने के लिए: Ctrl + Shift + F


10
जवाब थोड़ा भ्रामक है ... जब आप दबाते हैं Ctrl+Shift+F, तो यह केवल आउटपुट मोड को बदलता है, यह परिणामों को प्रभावित नहीं करता है यदि आप पहले से ही क्वेरी चलाते हैं। इसे प्रतिबिंबित करने के लिए, आपको क्वेरी को फिर से चलाना होगा। जब आप इसे "परिणाम टू फाइल" मोड में चलाते हैं, तो आपको इसके लिए संकेत देना चाहिए कि आप परिणामों को कहाँ सहेजना चाहते हैं।
qJake

3
टूल्स पर जाना चाहिए> विकल्प> क्वेरी परिणाम> SQL सर्वर > टेक्स्ट पर परिणाम
congusbongus

45
क्वेरी को फिर से चलाना मेरे लिए पर्याप्त नहीं था। मुझे क्वेरी विंडो बंद करनी थी, एक नया खोलना था और फिर क्वेरी को फिर से चलाना था।
Breandán

3
@ Breandán टिप्पणी की पुष्टि की। नई सेटिंग्स वर्तमान में खोली गई क्वेरी विंडो पर लागू नहीं होंगी, उन्हें बंद करना होगा और क्वेरी को फिर से चलाना होगा।
शिनिगामा

3
एक चीज जो मुझे करनी थी, उसे डिफ़ॉल्ट आरपीटी एक्सटेंशन के रूप में निर्यात किया गया था। ऐसा करने के बाद आप इसे केवल CSV में बदल सकते हैं और यह काम करता है।
थॉमस बेनेट

140

मुझे पता है कि यह थोड़ा पुराना है, लेकिन यहाँ एक बहुत आसान तरीका है ...

  1. डिफ़ॉल्ट सेटिंग्स के साथ अपनी क्वेरी चलाएँ (ग्रिड प्रारूप में परिणाम डालता है, यदि आपका ग्रिड प्रारूप में नहीं है, तो नीचे देखें)

  2. ग्रिड परिणामों पर राइट क्लिक करें और "परिणाम सहेजें" पर क्लिक करें और इसे सहेजें।

यदि आपके परिणाम ग्रिड प्रारूप में नहीं हैं, तो जहाँ आप प्रश्न लिखते हैं, वहाँ "राइट टू रिजल्ट" लिखें पर क्लिक करें और "परिणाम टू ग्रिड" पर क्लिक करें

ध्यान रखें कि आप कॉलम हेडर पर कब्जा नहीं करते हैं!

शुभ लाभ!


1
केवल समस्या यह है कि यह विधि आपको कोई विकल्प निर्धारित नहीं करने देती है। उदाहरण के लिए सभी NULLs आउटपुट फ़ाइलों में "NULL", आदि के रूप में दिखाते हैं। शायद इसे सेट करने का एक तरीका है जिसके बारे में मुझे नहीं पता, हालाँकि।
नूह

13
आश्चर्यजनक रूप से SSMS 2012 में, यह CSV के लिए पाठ को ठीक से उद्धृत नहीं करता है। CHAR / VARCHAR के भीतर एक अल्पविराम या नई पंक्ति को उद्धृत किया जाना चाहिए, लेकिन ऐसा नहीं है। इसके कारण डेटा नए कॉलम में या नई लाइन में शिफ्ट हो जाता है।
एरिक जे।

4
साथ ही आपको कॉलम हेडर नहीं देता है।
डॉन

8
@ यह कॉलम हेडर देता है यदि आप "क्वेरी" में जाते हैं -> "क्वेरी विकल्प ...", ग्रिड टैब, और चेक "कॉपी करते या परिणाम सहेजते समय कॉलम हेडर शामिल करें"
रोब वाइज

7
इसका उत्तर होना चाहिए।
pspahn

46

आप PowerShell का उपयोग कर सकते हैं

$AttachmentPath = "CV File location"
$QueryFmt= "Query"

Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath

धन्यवाद! यह एकमात्र सुझाव था जिसने मेरे लिए काम किया। ठीक से बच निकलने वाले हैंडल
एमटेक

3
+10 अगर मैं कर सका। केवल उत्तर है कि बच निकलता है। इसे चलाने के लिए, मुझे स्क्रिप्ट के शीर्ष पर दो पंक्तियों को जोड़ना होगा: Add-PSSnapin SqlServerCmdletSnapin100और Add-PSSnapin SqlServerProviderSnapin100
एरिक जे।

यदि आप टाइमआउट का सामना करते हैं, तो क्वेरी टाइप करें जैसे किInvoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Tilo

1
Powershell newbie के रूप में मुझे SqlServer मॉड्यूल को स्थापित करने की Install-Module -Name SqlServerआवश्यकता थी : (लेकिन उन सिमलेट्स में स्नैप करने की आवश्यकता नहीं थी)। इसके अलावा, मैं कमांड को एक स्क्रिप्ट में सहेजता हूं, जो तब तक नहीं चलेगा जब तक मैं निष्पादन नीति को नहीं बदलूंगा Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser:।
सैंडसेकॉट

@sandyscott मैं एक पॉवरशेल नौसिखिया हूँ, इसलिए धन्यवाद। वैसे भी मुझे लगता है कि इस मामले में एक RemoteSignedनिष्पादन नीति पर्याप्त होगी।
बिगबटन

14

यदि प्रश्न में डेटाबेस स्थानीय है, तो संभवतः CSV फ़ाइल के लिए क्वेरी परिणाम निर्यात करने का सबसे मजबूत तरीका है (यानी, आपको सबसे अधिक नियंत्रण देना)।

  1. क्वेरी की प्रतिलिपि बनाएँ।
  2. ऑब्जेक्ट एक्सप्लोरर में प्रश्न में डेटाबेस पर राइट-क्लिक करें।
  3. "कार्य" >> "डेटा निर्यात करें ..." चुनें
  4. अपने डेटा स्रोत को कॉन्फ़िगर करें, और "अगला" पर क्लिक करें।
  5. गंतव्य के रूप में "फ्लैट फ़ाइल" या "माइक्रोसॉफ्ट एक्सेल" चुनें।
  6. एक फ़ाइल पथ निर्दिष्ट करें।
  7. यदि एक फ्लैट फ़ाइल के साथ काम कर रहे हैं, तो वांछित के रूप में कॉन्फ़िगर करें। यदि Microsoft Excel के साथ काम कर रहा है, तो "Excel 2007" चुनें (पिछले संस्करणों में पंक्ति की सीमा 64k है)
  8. "स्थानांतरण के लिए डेटा निर्दिष्ट करने के लिए एक क्वेरी लिखें" चुनें
  9. चरण 1 से क्वेरी चिपकाएँ।
  10. अगला >> समीक्षा मैपिंग पर क्लिक करें >> अगला क्लिक करें >> "तुरंत चलाएं" >> दो बार "खत्म" पर क्लिक करें।

इस प्रक्रिया से थकने के बाद, मुझे निम्नलिखित में से एक सबसे अच्छा विकल्प लगा

पॉवरशेल स्क्रिप्ट

$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

व्यवस्थापक के रूप में PowerShell चलाएँ

& "c:\path_to_your_ps1_file.ps1"

1
आप जोड़ना समय समाप्ति का सामना करता है, तो querytimeout तो जैसेInvoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Tilo

6

MS Excel -> डेटा -> नई क्वेरी -> डेटाबेस से .. चरणों का पालन करें


6

NS के उत्तर पर बिल्डिंग, मेरे पास एक PowerShell स्क्रिप्ट है जो CSV फ़ाइल को फ़ील्ड के चारों ओर उद्धरण चिह्नों के साथ निर्यात करती है और अल्पविराम से अलग हो जाती है और यह फ़ाइल में शीर्ष लेख की जानकारी को छोड़ देती है।

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"

पहली दो पंक्तियाँ Invoke-SqlCmd कमांड-लेट का उपयोग करने की क्षमता को सक्षम करती हैं ।


6

T-SQL का उपयोग करें :

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

लेकिन, कुछ जोड़े हैं:

  1. आपको Microsoft.ACE.OLEDB.12.0 प्रदाता उपलब्ध होना चाहिए। जेट 4.0 प्रदाता भी काम करेगा, लेकिन यह प्राचीन है, इसलिए मैंने इसके बजाय इसका उपयोग किया।

  2. .CSV फ़ाइल को पहले से मौजूद होना चाहिए। यदि आप हेडर ( HDR=YES) का उपयोग कर रहे हैं , तो सुनिश्चित करें कि .CSV फ़ाइल की पहली पंक्ति सभी फ़ील्ड की सीमांकित सूची है।


3

CSV को निर्यात करने के लिए मूल SQL सर्वर प्रबंधन स्टूडियो तकनीक का उपयोग करना (जैसा कि @ 8kb का सुझाव दिया गया है) यदि आपके मानों में अल्पविराम नहीं है, तो काम नहीं करता है, क्योंकि SSMS दोहरे उद्धरण चिह्नों में मानों को लपेटता नहीं है। मेरे लिए काम करने का एक अधिक मजबूत तरीका केवल परिणामों की प्रतिलिपि बनाना है (ग्रिड के अंदर क्लिक करें और फिर CTRL-A, CTRL-C) और इसे एक्सेल में पेस्ट करें। फिर एक्सेल से CSV फ़ाइल के रूप में सहेजें।


2

आप QueryToDoc ( http://www.querytodoc.com ) का उपयोग कर सकते हैं । यह आपको SQL डेटाबेस के खिलाफ एक क्वेरी लिखने और परिणामों को निर्यात करने देता है - आपके द्वारा सीमांकन करने के बाद - एक्सेल, वर्ड, एचटीएमएल या वीवीवी के लिए


2
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

जैसा कि @Slogmeister एक्सट्राऑर्डिनेयर कोटेड सही है।

कॉलम 1 के साथ 1> फ़ाइल पहले से मौजूद होनी चाहिए> कार्यालय स्थापित होने के लिए एक की आवश्यकता है

त्रुटियों का सामना करना पड़ा

1

Msg 7303, स्तर 16, राज्य 1, पंक्ति 1 OLE DB प्रदाता "Microsoft.ACE.OLEDB.12.0" के डेटा स्रोत ऑब्जेक्ट को "लिंक किए गए सर्वर" (नल) के लिए प्रारंभ नहीं कर सकता है।

64 बिट http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_x64.exe

32 बिट http://download.microsoft.com/download/f/d/8/fd8c20d8-e38a-48b6-8691-542403b91da1/AccessDatabaseEngine.exe

2

Msg 15281, स्तर 16, राज्य 1, लाइन 1 SQL सर्वर ने घटक 'Ad Hoc Distributed Queries' के STATEMENT 'OpenRowset / OpenDatasource' तक पहुंच को अवरुद्ध कर दिया क्योंकि यह घटक इस सर्वर के सुरक्षा कॉन्फ़िगरेशन के भाग के रूप में बंद है। एक सिस्टम व्यवस्थापक sp_configure का उपयोग करके 'Ad Hoc Distributed Queries' के उपयोग को सक्षम कर सकता है। 'एड हॉक डिस्ट्रीब्यूटेड क्वैरिज' को सक्षम करने के बारे में अधिक जानकारी के लिए, SQL सर्वर बुक्स ऑनलाइन में 'एड हॉक डिस्ट्रिब्यूटेड क्वैरिज' खोजें।

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO

2

यदि आप Powershell का उपयोग नहीं करना चाहते हैं, तो यह उत्तर 8kb के महान उत्तर पर भिन्नता है। एकमात्र अंतर यह है कि आउटपुट प्रारूप के रूप में सीएसवी का चयन करने के बजाय, टैब डिलीटेड का चयन करें। इस तरह अगर आपके डेटा में कॉमा हैं, तो यह एक्सेल में कोशिकाओं को नहीं छोड़ेगा। साथ ही, यदि आपके पास Excel का डिफ़ॉल्ट सीमांकित टैब पर सेट है, तो आप बस SSMS क्वेरी परिणामों (CTRL-A, CTRL-C) की प्रतिलिपि बना सकते हैं और Excel में पेस्ट कर सकते हैं (फ़ाइल के रूप में सहेजने और Excel में आयात करने की आवश्यकता नहीं है) ):

  • SSMS में उपकरण> विकल्प> क्वेरी परिणाम> SQL सर्वर> परिणाम पाठ पर जाएं
  • टैब डिलीट किए गए दाईं ओर आउटपुट स्वरूप बदलें
  • ओके पर क्लिक करें

अब आप अपनी क्वेरी को निष्पादित कर सकते हैं, फिर सभी परिणामों का चयन करने के लिए एक CTRL-A करें, फिर CTRL-C को क्लिपबोर्ड पर कॉपी करें, फिर Excel 2013 पर स्विच करें (2007 में भी काम कर सकते हैं, सुनिश्चित नहीं हैं) और पेस्ट करें - एक्सेल की डिफ़ॉल्ट मान सीमांकक टैब पर सेट है।

SSMS क्वेरी विकल्प स्क्रीन की छवि


-1

हां, ये सब तब संभव है जब आपके पास सर्वरों की सीधी पहुंच हो। लेकिन क्या होगा यदि आपके पास केवल वेब / एप्लिकेशन सर्वर से सर्वर तक पहुंच है? खैर, यह स्थिति हमारे साथ बहुत पहले थी और समाधान SQL सर्वर निर्यात CSV के लिए था


लिंक ... प्रवेश निषेध?
hoggar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.