Ekspor hasil permintaan ke file .csv di SQL Server 2008

141

Bagaimana saya bisa mengekspor hasil permintaan ke file .csv di SQL Server 2008?

Emas
sumber
Apakah Anda perlu pembatas Anda lolos? Sebagian besar jawaban sejauh ini menganggap Anda tidak, yang sebenarnya bukan CSV.
Nick
@Nick - pembatas umumnya hanya berisi string, dan mereka biasanya memiliki tanda kutip di sekitarnya. Lihat jawaban saya untuk melihat solusi untuk ini. stackoverflow.com/questions/6115054/…
MacGyver
Saya terkadang menggunakan Python
LV98

Jawaban:

168
  1. Buka SQL Server Management Studio
  2. Buka Alat> Opsi> Hasil Kueri> SQL Server> Hasil Ke Teks
  3. Di paling kanan, ada kotak drop down yang disebut Output Format
  4. Pilih Comma Delimited dan klik OK

Berikut versi layar penuh dari gambar itu, di bawah ini

masukkan deskripsi gambar di sini

Ini akan menampilkan hasil kueri Anda sebagai teks yang dibatasi koma.

Untuk menyimpan hasil kueri ke file: Ctrl + Shift + F

8kb
sumber
10
Jawabannya agak menyesatkan ... Saat Anda menekan Ctrl+Shift+F, itu hanya mengubah mode keluaran, itu tidak mempengaruhi hasil jika Anda sudah menjalankan kueri. Agar ini tercermin, Anda harus menjalankan kembali kueri. Ketika Anda menjalankannya dalam mode "Hasil ke File", itu akan meminta Anda untuk tempat Anda ingin menyimpan hasil.
qJake
3
Seharusnya Buka Alat> Opsi> Hasil Kueri> SQL Server > Hasil Ke Teks
congusbongus
45
Menjalankan kembali kueri tidak cukup untuk saya. Saya harus menutup jendela kueri, membuka yang baru dan kemudian menjalankan kueri lagi.
Breandán
3
Komentar @ Breandán yang dikonfirmasi. Pengaturan baru tidak akan berlaku untuk jendela permintaan yang saat ini dibuka, harus menutupnya dan menjalankan kembali permintaan.
Shinigamae
3
Satu hal yang harus saya lakukan adalah mengekspornya sebagai ekstensi RPT default. Setelah melakukan itu, Anda dapat dengan mudah mengubah nama menjadi CSV dan berfungsi.
Thomas Bennett
140

Saya tahu ini agak lama, tapi ini cara yang lebih mudah ...

  1. Jalankan kueri Anda dengan pengaturan default (menempatkan hasil dalam format grid, jika Anda tidak dalam format grid, lihat di bawah)

  2. Klik kanan pada hasil kisi dan klik "Simpan Hasil Sebagai" dan simpan.

Jika hasil Anda tidak dalam format kisi, klik kanan tempat Anda menulis kueri, arahkan "Hasil Ke" dan klik "Hasil Ke Kotak"

Ketahuilah bahwa Anda TIDAK menangkap tajuk kolom!

Semoga berhasil!

Ricketts
sumber
1
Satu-satunya masalah adalah bahwa metode ini tampaknya tidak membiarkan Anda mengatur opsi apa pun. Sebagai contoh, semua NULL ditampilkan dalam file output sebagai "NULL", dll. Mungkin ada cara untuk mengatur ini yang tidak saya ketahui.
Noah
13
Hebatnya bahkan di SSMS 2012, ini tidak mengutip teks dengan benar untuk CSV. Koma atau baris baru dalam CHAR / VARCHAR harus dikutip, tetapi tidak. Itu menyebabkan data bergeser ke kolom baru atau ke baris baru.
Eric J.
4
Juga tidak memberi Anda tajuk kolom.
Don
8
@Don, ini memberikan tajuk kolom jika Anda masuk ke "Permintaan" -> "Opsi Kueri ...", tab kotak, dan centang "sertakan tajuk kolom saat menyalin atau menyimpan hasil"
Rob Wise
7
Ini seharusnya jawabannya.
pspahn
46

Anda dapat menggunakan PowerShell

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

Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
NS
sumber
Terima kasih! Ini adalah satu-satunya saran yang berhasil untuk saya. Menangani keluar dengan benar
emertechie
3
+10 jika aku bisa. Hanya jawaban yang menangani pelarian. Untuk menjalankan ini, saya harus menambahkan dua baris di bagian atas skrip: Add-PSSnapin SqlServerCmdletSnapin100dan Add-PSSnapin SqlServerProviderSnapin100.
Eric J.
jika Anda menghadapi batas waktu tambahkan querytimeout jadi mis.Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Tilo
1
Sebagai pemula Powershell saya perlu menginstal Modul SqlServer: Install-Module -Name SqlServer(tetapi tidak perlu membobol Cmdlets tersebut). Juga, saya telah menyelamatkan perintah dalam script, yang tidak akan berjalan sampai aku mengubah kebijakan eksekusi: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser.
sandyscott
@sandyscott Saya seorang pemula Powershell juga, jadi terima kasih. Pokoknya saya berpikir bahwa dalam hal ini RemoteSignedkebijakan eksekusi akan cukup.
BigBother
14

Jika basis data yang dimaksud adalah lokal, berikut ini mungkin merupakan cara paling kuat untuk mengekspor hasil kueri ke file CSV (artinya, memberi Anda kontrol terbanyak).

  1. Salin kueri.
  2. Di Object Explorer klik kanan pada database yang dimaksud.
  3. Pilih "Tugas" >> "Ekspor Data ..."
  4. Konfigurasikan sumber data Anda, dan klik "Next".
  5. Pilih "File Rata" atau "Microsoft Excel" sebagai tujuan.
  6. Tentukan jalur file.
  7. Jika bekerja dengan file flat, konfigurasikan sesuai keinginan. Jika bekerja dengan Microsoft Excel, pilih "Excel 2007" (versi sebelumnya memiliki batas baris pada 64k)
  8. Pilih "Tulis kueri untuk menentukan data yang akan ditransfer"
  9. Rekatkan kueri dari Langkah 1.
  10. Klik berikutnya >> tinjau pemetaan >> klik berikutnya >> pilih "jalankan segera" >> klik "selesai" dua kali.

Setelah melalui proses ini secara mendalam, saya menemukan yang berikut ini sebagai pilihan terbaik

Skrip PowerShell

$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

Jalankan PowerShell sebagai Admin

& "c:\path_to_your_ps1_file.ps1"
pimbrouwers
sumber
1
jika Anda menghadapi batas waktu tambahkan querytimeout jadi misalnyaInvoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Tilo
6

MS Excel -> Data -> Permintaan Baru -> Dari Database .. ikuti langkah-langkahnya

tichra
sumber
6

Berdasarkan jawaban NS, saya memiliki skrip PowerShell yang mengekspor ke file CSV dengan tanda kutip di sekitar bidang dan dipisahkan koma dan melompati informasi header di file.

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"

Dua baris pertama memungkinkan kemampuan untuk menggunakan perintah-let Invoke-SqlCmd .

BeowulfNode42
sumber
6

Gunakan 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

Tapi, ada beberapa peringatan:

  1. Anda harus memiliki penyedia Microsoft.ACE.OLEDB.12.0 tersedia. Penyedia Jet 4.0 akan bekerja juga, tapi ini kuno, jadi saya menggunakan yang ini sebagai gantinya.

  2. File .CSV harus sudah ada. Jika Anda menggunakan header ( HDR=YES), pastikan baris pertama file .CSV adalah daftar semua bidang yang dibatasi.

Slogmeister Luar Biasa
sumber
3

Menggunakan teknik SQL Server Management Studio asli untuk mengekspor ke CSV (seperti yang disarankan @ 8kb) tidak berfungsi jika nilai Anda mengandung koma, karena SSMS tidak membungkus nilai dalam tanda kutip ganda. Cara yang lebih kuat yang bekerja untuk saya adalah dengan menyalin hasil (klik di dalam kotak dan kemudian CTRL-A, CTRL-C) dan tempel ke Excel. Kemudian simpan sebagai file CSV dari Excel.

Johnny Oshika
sumber
2

Anda dapat menggunakan QueryToDoc ( http://www.querytodoc.com ). Ini memungkinkan Anda menulis kueri terhadap basis data SQL dan mengekspor hasilnya - setelah Anda memilih pembatas - ke Excel, Word, HTML, atau CSV

Robert
sumber
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

sebagai @Slogmeister Extraordinaire Dikutip sudah benar.

Seseorang perlu memiliki 1> File sudah hadir dengan kolom 2> Satu perlu memiliki Office diinstal

Kesalahan yang dihadapi

1

Msg 7303, Level 16, Negara 1, Baris 1 Tidak dapat menginisialisasi objek sumber data dari penyedia OLE DB "Microsoft.ACE.OLEDB.12.0" untuk server tertaut "(null)". "

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

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

2

Msg 15281, Level 16, State 1, Line 1 SQL Server memblokir akses ke PERNYATAAN 'OpenRowset / OpenDatasource' dari komponen 'Ad Hoc Distributed Queries' karena komponen ini dimatikan sebagai bagian dari konfigurasi keamanan untuk server ini. Administrator sistem dapat mengaktifkan penggunaan 'Kueri Terdistribusi Ad Hoc' dengan menggunakan sp_configure. Untuk informasi lebih lanjut tentang mengaktifkan 'Kueri Terdistribusi Ad Hoc', cari 'Kueri Terdistribusi Ad Hoc' di SQL Server Books Online.

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

Jika Anda tidak ingin menggunakan Powershell, jawaban ini adalah variasi dari jawaban hebat 8kb. Satu-satunya perbedaan adalah bahwa alih-alih memilih CSV sebagai format output, pilih Tab Delimited. Dengan cara ini jika ada koma di data Anda, itu tidak akan melewati sel di Excel. Juga, jika Anda memiliki pembatas default Excel yang diatur ke tab, Anda cukup melakukan salin-semua hasil permintaan SSMS (CTRL-A, CTRL-C) dan tempel ke Excel (tidak perlu menyimpan sebagai file dan mengimpor ke Excel ):

  • Dalam SSMS Buka Alat> Opsi> Hasil Kueri> SQL Server> Hasil Ke Teks
  • Ubah format output di paling kanan ke Tab Delimited
  • Klik OK

Sekarang Anda dapat mengeksekusi kueri Anda, kemudian melakukan CTRL-A untuk memilih semua hasil, kemudian CTRL-C untuk menyalin ke clipboard, kemudian beralih ke Excel 2013 (dapat bekerja pada 2007 juga, tidak yakin) dan menempel - mengasumsikan default Excel pembatas diatur ke tab.

Gambar Layar Opsi Kueri SSMS

TomWalker
sumber
-1

Ya, semua ini dimungkinkan ketika Anda memiliki akses langsung ke server. Tetapi bagaimana jika Anda hanya memiliki akses ke server dari server web / aplikasi? Nah, situasinya adalah ini dengan kami kembali dan solusinya adalah SQL Server Ekspor ke CSV .

Jiju Thomas Mathew
sumber
Tautan ... Akses ditolak?
hoggar