MS SQL sunucusundan Veri Aktarmanın En İyi Yolu


3

[TL: DR] Geçici verileri bir MS SQL Server DB'den yerel makinemdeki bir dosyaya önceden belirlenmiş bir formatta * Latin1 kodlaması kullanarak vermem gerekiyor. SSMS'nin bir iş akışı yaratmanın bir yolu olup olmadığından veya bir PowerShell script çözümü olup olmadığından emin değildim, ancak ne yazık ki SSIS kullanamıyorum.

Daha uzun hikaye

Sık sık çeşitli MS SQL Server örnekleri üzerindeki bir grup tablodan veri ayıklarım ve bu örneklerin tümü, 2008'den 2016'ya kadar çeşitli SQL Server sürümleri çalıştırıyor. Verileri dışa aktardıktan sonra, SSIS paketleri kullanılarak ayarlanmış farklı test ortamları oluşturmak için kullanırım.

Genellikle SSMS 2016 kullanarak SQL Sunucularına bağlanıyorum ve ardından "Verileri Ver" sihirbazını kullanıyorum. Bu yöntemle çeşitli seçeneklerin manuel olarak tıklanması gerekmediğinden, çok verimli değildir ve tüm manuel tıklama yönleri ve hatalar bu seviyede yapıldığından ve bu zamana kadar fark edilmemesi nedeniyle bu görevde insan hatası meydana gelmektedir. veri gerekli, analiz edilmiş, vb.

Bu süreci gerçekleştirmenin bir yolunu istiyorum: Daha az manuel insan adımları için daha verimli ve otomatikleştirmeye çalıştım. PowerShell (ve SQLPS) yöntemini kullanmayı denedim ve çok yavaş görünüyor ve verilen dosyaların kodlaması hiç doğru değildi. Eski DB'ler ve eski SSIS paketleri ile çalışıyorum ve tüm bunları UTF8'e dönüştürmek çok karışık görünüyor, bu yüzden kesinlikle ANSI1252 (Latin 1) kodlamasında çıktıya ihtiyacım var.

Bana yardımcı olabilecek bazı iyi önerileri olan orada uzman var mı?


İyi. Aşağı oy ve tüm yapıcı geri bildirim için teşekkür ederiz. Real helpful ..
Niclas

Lütfen Süper Kullanıcının bir komut dosyası yazma hizmeti olmadığını unutmayın . Bize şu ana kadar ne denediğinizi (kullandığınız herhangi bir komut dosyası dahil) ve nerede kaldığınızı söylerseniz, belirli sorunlarda size yardımcı olabiliriz. Ayrıca şunu da okumalısınız: Nasıl iyi bir soru sorabilirim? .
DavidPostill

Senaryo yazarken yardım istemiyorum, hatta senaryoları yazdığımı, ancak SQLPS'in performans ve çıktı kodlama seçeneklerinin eksik olduğunu belirttiğimden bile bahsetmiştim. Daha da fazla TLDR özeti: SQLPS, hatalı kodlama kullanımı ve yavaş. SMSS ihracat sihirbazı çok fazla manuel adım (fare tıklaması). SSIS paketleri sunucuya yazma erişimine ve VS sürümüne sıkı bağlanmaya bağlıdır. Verimli ne yapmalı (yeniden kullanılabilir, taşınabilir ve tablo kodlarının seçilebilen kodlama ve iyi performansla dağıtılması için hızlı olması gibi).
Niclas

1
BCP'yi denedin mi? Performans bilge bu bizim için en iyi seçenek olmuştur. ANSI1252 kodlama tho yapabiliyor mu emin değilim
user2676140

Yanıtlar:


3

Geçici verileri bir MS SQL sunucusundan yerel makinemdeki bir dosyaya, Latin1 kodlaması ile önceden belirlenmiş bir format kullanarak dışa aktarma? Salt okunur sunucular ve değişken SQL sunucu sürümleri nedeniyle SSIS çıktı (sanırım).

Bir yorumda belirtildiği gibi tekrar söyleyeceğim ... bu yüzden BCP Hizmet Programına bir göz atın .

Sen söz kodlamayı içinde Unicode ; ve BCP Yardımcı Programı Dışa Aktarılacak Unicode Karakter Formatını destekler, böylece ... yerel makine gereksinimlerinizdeki bir dosyaya özel ekstraktlarınız için bu yöntemi kullanın .

Ayrıca, unutma harmanlamak varsa, siz "olabilir, çünkü belli bir harmanlama bir karakter ifadesini uygulamak için COLLATE yan tümcesini kullanmak ihracat sorgusu için uygulanan mantık dahilinde".

Bcp Yardımcı Programını Kullanarak Toplu Verileri Alma ve Verme (SQL Server)

Bu konu, bir SELECT ifadesinin, bölümlenmiş görünümler de dahil olmak üzere çalıştığı bir SQL Server veritabanındaki herhangi bir yerden veri dışa aktarmak için bcp yardımcı programını kullanmaya genel bir bakış sağlar.

Bcp yardımcı programı (Bcp.exe), Toplu Kopyalama Programı (BCP) API'sini kullanan bir komut satırı aracıdır. Bcp yardımcı programı aşağıdaki görevleri gerçekleştirir:

  • Toplu, bir SQL Server tablosundan verileri bir veri dosyasına verir.

  • Toplu, bir sorgudan veri verir.

  • Toplu, verileri bir veri dosyasından bir SQL Server tablosuna alır.

  • Format dosyalarını oluşturur.

Bcp yardımcı programına bcp komutu ile erişilir . Kullanmak için BCP Eğer önceden varolan bir biçim dosyasını kullanarak sürece toplu alma verilerine komutu, sen tablonun şema ve onun sütunların veri türlerini anlamak gerekir.

Bcp yardımcı programı, diğer programlarda kullanmak için verileri bir SQL Server tablosundan bir veri dosyasına aktarabilir. Yardımcı program ayrıca başka bir programdan, genellikle başka bir veritabanı yönetim sisteminden (DBMS) bir SQL Server tablosuna veri alabilir. Veriler önce kaynak programdan bir veri dosyasına aktarılır ve daha sonra ayrı bir işlemde veri dosyasından bir SQL Server tablosuna kopyalanır.

BCP komut veri dosyası ve diğer bilgilerin veri türünü belirtmek için kullanın anahtarları sağlar. Bu anahtarlar belirtilmezse, komut bir veri dosyasındaki veri alanları türü gibi bilgileri biçimlendirmeyi ister. Komut daha sonra etkileşimli yanıtlarınızı içeren bir format dosyası oluşturmak isteyip istemediğinizi sorar. Gelecekteki toplu ithalat veya toplu ihracat işlemleri için esneklik istiyorsanız, bir format dosyası genellikle yararlıdır. Format dosyasını, eşdeğer veri dosyaları için daha sonraki bcp komutlarında belirleyebilirsiniz. Daha fazla bilgi için, bkz . Bcp (SQL Server) Kullanırken Uyumluluk İçin Veri Formatları Belirleme .

Not!! Bcp yardımcı programı, ODBC toplu kopyası kullanılarak yazılmıştır. Bcp komut sözdiziminin bir açıklaması için, bkz. Bcp Utility.

Örnekler

İçin BCP örnekler, bakınız:

kaynak


Bcp tam olarak eksik olduğum bir araç gibi görünüyor. Teşekkürler!
Niclas,

1

Öğleden sonra,

Çok yardımı olup olmadığından emin değilim - ama her zaman SQL ile çalışırken .net nesnelerini oldukça sağlam buldum. Bunun gibi bir şey benim için iyi çalışıyor:

$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()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.