Cara yang lebih baik untuk Mengekspor Data dari MS SQL server

3

[TL: DR] Saya harus dapat mengekspor data ad-hoc dari MS SQL Server DB ke file di mesin lokal saya menggunakan format yang telah ditentukan dengan * Latin1 encoding. Saya tidak yakin apakah SSMS memiliki cara untuk membuat alur kerja, atau jika ada solusi skrip PowerShell, tapi sayangnya saya tidak dapat menggunakan SSIS karena berbagai alasan.

Cerita yang lebih panjang

Saya sering mengekstrak data dari banyak tabel di berbagai instance MS SQL Server, dan semua instance ini menjalankan berbagai versi SQL Server dari 2008 hingga 2016 saat ini. Setelah saya mengekspor data, saya menggunakannya untuk membangun lingkungan pengujian yang berbeda yang diatur menggunakan paket SSIS.

Saya biasanya terhubung ke SQL Server menggunakan SSMS 2016, dan kemudian saya menggunakan wizard "Ekspor Data". Karena kebutuhan harus mengklik secara manual pada berbagai opsi dengan metode ini, itu tidak sangat efisien dan juga kesalahan manusia terjadi dengan tugas ini karena semua aspek mengklik manual dan kesalahan sedang dilakukan pada tingkat ini dan tidak diperhatikan sampai data dibutuhkan, dianalisis, dll.

Saya ingin cara membuat proses ini. Saya telah mencoba menjelaskan lebih efisien dan mengotomatiskan lebih banyak untuk langkah-langkah manusia yang kurang manual. Saya mencoba menggunakan metode PowerShell (dan SQLPS) dan tampaknya sangat lambat dan penyandian untuk file yang diekspor tidak pernah benar. Saya bekerja dengan paket DB dan SSIS lama, dan mengonversikan semua ini ke UTF8 tampak sangat berantakan, jadi saya benar-benar membutuhkan keluaran dalam penyandian ANSI1252 (Latin 1).

Adakah pakar di luar sana dengan beberapa saran bagus yang akan membantu saya?

Niclas
sumber
Baik. Terima kasih atas downvote dan semua umpan balik yang membangun. Sangat membantu ..
Niclas
Harap dicatat bahwa Pengguna Super bukan layanan penulisan skrip. Jika Anda memberi tahu kami apa yang telah Anda coba sejauh ini (termasuk skrip yang Anda gunakan) dan di mana Anda macet, maka kami dapat mencoba membantu dengan masalah tertentu. Anda juga harus membaca Bagaimana saya mengajukan pertanyaan yang bagus? .
DavidPostill
Saya tidak meminta bantuan menulis skrip, saya bahkan menyebutkan bahwa saya menulis skrip tetapi menemukan kinerja dan output opsi pengkodean SQLPS kurang. Bahkan lebih banyak ringkasan TLDR: SQLPS, penanganan penyandian yang buruk dan lambat. Panduan ekspor SMSS terlalu banyak langkah manual (klik mouse). Paket SSIS bergantung pada akses tulis ke server dan kopling ketat ke versi-VS. Apa yang harus dilakukan? efisien (seperti dalam reusable, portable dan cepat untuk menyebarkan ekspor tabel dengan encoding yang dapat dipilih dan kinerja yang baik)
Niclas
1
Sudahkah Anda mencoba BCP? Dari segi kinerja, ini telah menjadi pilihan terbaik bagi kami. Tidak yakin apakah itu dapat melakukan pengkodean ANSI1252
user2676140

Jawaban:

3

ekspor data ad-hoc dari server MS SQL ke file di komputer lokal saya,   menggunakan format yang ditentukan sebelumnya dengan pengkodean Latin1? SSIS keluar (I   berpikir) karena server hanya-baca dan berbagai versi server SQL.

Saya akan mengatakannya lagi seperti yang disebutkan dalam komentar ... jadi lihat Utilitas BCP .

Anda menyebutkan encoding di Unicode ; dan Utilitas BCP mendukung Format Karakter Unicode untuk Diekspor jadi ... lihatlah menggunakan metode ini untuk Anda ekstrak ad hoc ke file di mesin lokal Anda kebutuhan.

Selain itu, jangan lupakan MENYUSUN karena, jika berlaku, Anda bisa " gunakan klausa COLLATE untuk menerapkan ekspresi karakter pada susunan tertentu "dalam logika yang diterapkan untuk permintaan ekspor.

Impor dan Ekspor Data Massal dengan Menggunakan bcp Utility (SQL Server)

Topik ini memberikan gambaran umum untuk menggunakan bcp   utilitas untuk   ekspor data dari mana saja di database SQL Server tempat SELECT   pernyataan berfungsi, termasuk tampilan yang dipartisi

Utilitas bcp (Bcp.exe) adalah alat baris perintah yang menggunakan Massal   API Program Salin (BCP). Utilitas bcp melakukan tugas-tugas berikut:

  • Ekspor massal data dari tabel SQL Server ke file data.

  • Ekspor massal data dari kueri.

  • Impor massal data dari file data ke tabel SQL Server.

  • Menghasilkan file format.

Utilitas bcp diakses oleh bcp perintah. Untuk menggunakan bcp perintah untuk mengimpor data massal, Anda harus memahami skema   tabel dan tipe data kolomnya, kecuali jika Anda menggunakan a   file format yang sudah ada sebelumnya.

Utilitas bcp dapat mengekspor data dari tabel SQL Server ke file data   untuk digunakan dalam program lain. Utilitas juga dapat mengimpor data ke dalam SQL   Tabel server dari program lain, biasanya manajemen database lain   sistem (DBMS). Data pertama kali diekspor dari program sumber ke a   file data dan kemudian, dalam operasi terpisah, disalin dari file data   ke dalam tabel SQL Server.

Itu bcp perintah menyediakan sakelar yang Anda gunakan untuk menentukan data   jenis file data dan informasi lainnya. Jika sakelar ini tidak   ditentukan, perintah meminta informasi format, seperti   jenis bidang data dalam file data. Perintah itu kemudian bertanya apakah Anda   ingin membuat file format yang berisi respons interaktif Anda.   Jika Anda menginginkan fleksibilitas untuk impor massal atau ekspor massal di masa mendatang   operasi, file format sering bermanfaat. Anda dapat menentukan formatnya   file nanti bcp perintah untuk file data yang setara. Untuk lebih   informasi, lihat Tentukan Format Data untuk Kompatibilitas saat Menggunakan   bcp (SQL   Server) .

Catatan!! Utilitas bcp ditulis dengan menggunakan salinan massal ODBC. Untuk deskripsi sintaks perintah bcp, lihat bcp Utility.

Contohnya

Untuk bcp contoh, lihat:

sumber

Pimp Juice IT
sumber
Bcp tampaknya persis alat yang saya lewatkan. Terima kasih!
Niclas
2

Sore,

Tidak yakin apakah ini banyak membantu - tapi saya selalu menemukan menggunakan objek bersih cukup solid saat bekerja dengan SQL. Sesuatu seperti ini bekerja dengan baik untuk saya:

$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Connection_String_Goes_Here"
$conn.open()

$cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.connection = $conn

$cmd.commandtext = "SELECT * FROM myTable"

$sqlResults = $cmd.ExecuteReader()

$sqlResults | Get-Member

if ($sqlResults.HasRows -eq $true) {
    while ($sqlResults.read()) {
        $sqlResults.GetValue(1)
    }
} else {
    "No Results"
}

$conn.Close()
Fazer87
sumber