Unicode olmayan dizeyi Unicode dizesi SSIS'e dönüştürme


9

Ben bir veritabanından boş bir excel dosyasına veri ihraç olacak bir paket oluşturuyorum. Yalnızca kaynak ve hedef bileşenleri eklediğimde ve paketi çalıştırdığımda Çıkış sütunu ve "A" sütunun unicode ve unicode olmayan dize veri türleri arasında dönüştürülemediğini belirten bir dönüştürme hatası aldım.

Bunu düzeltmek için bir veri dönüştürme bileşeni ekledim ve tüm sütunları

"Unicode Dizesi [DT_WSTR]"

ve artık hatayı almadım. Tek sorun, 1'e 1 gitmek ve açılır listeden "Unicode String [DT_WSTR]" seçmek zorunda kaldı yaklaşık 50 sütun vardı. Sonra hedef bileşen gitmek ve excel dosyama yeni dönüştürülen sütunları eşlemek zorunda kaldı.

Benim sorum şu ki, eğer başka birisi bununla karşılaşırsa, tüm manuel veri türü dönüşümlerini yapmak zorunda kalmanın daha iyi ve etkili bir yolu var mı? Özellikle çok sayıda satırınız varsa, tüm sütunları tek tek dönüştürmeniz ve eşlemeniz pratik görünmüyor.

Ben excel dosyaları veri almak ve vermek için gitmek için en iyi yol olmadığını anlıyorum ama bu özel durumda ne gereklidir.

Ben sadece düz bir metin dosyasına ihracat ve sonra pakette son adım olarak excel dönüştürmek için bir yol arayabilirsiniz. Bu alışkanlık aynı unicode / nonunicode dönüşüm hatası tetiklemek umuyorum.


bundan sonra karpal tünel sendromunuz nasıl? :-)
Patrick Honorez

Verileri taşıdığınız tablonun Unicode veri türlerini kullandığından emin olun (yani: varchar (50) yerine nvarchar (50))
MacGyver

Yanıtlar:


15

RDC'ye bir alternatif olarak, sadece SSIS'deki veri türlerini dönüştürmeyi atladım ve bunları kaynak sorgumda açıkça nvarchar olarak yayınladım.

kullanım

Kaynak sorguda (ve olan bir kaynak sorgu kullanarak ve değil sadece damla aşağı tabloyu seçerek), açıkça uygun bir n (var) Char uzunluğuna şeyler attı.

Onun yerine

SELECT
    E.BusinessEntityID
,   E.NationalIDNumber
,   E.LoginID
,   E.JobTitle
,   E.BirthDate
,   E.MaritalStatus
,   E.Gender
FROM
    HumanResources.Employee AS E

gibi bir sorgu kullan

SELECT
    CAST(E.BusinessEntityID AS nvarchar(10)) AS BusinessEntityID
,   CAST(E.NationalIDNumber AS nvarchar(15)) AS NationalIDNumber
,   CAST(E.LoginID AS nvarchar(256)) AS LoginID
,   CAST(E.JobTitle AS nvarchar(50)) AS JobTitle
,   CAST(E.BirthDate AS nvarchar(10)) AS BirthDate
,   CAST(E.MaritalStatus AS nchar(1)) AS MaritalStatus
,   CAST(E.Gender AS nchar(1)) AS Gender
FROM
    HumanResources.Employee AS E

Zeki AdventureWorks öğrencileri verilerin zaten bir n(var)chartür olduğunu anlayacaklar, ancak bu sadece konsepti göstermek içindi.

Yararları

  • Daha az bellek kullanılır. Şu anda, "aynı" verilerin iki kopyasını Data Conversion ComponentSSIS'de kullanarak ayıracak ve depolayacaksınız.
  • RSI yok . N kez tıklamanıza ve sağladıkları korkunç küçük editörde tüm bu bilgileri belirtmenize gerek yoktur. Ben daha "Excel hazır" tablo ihracat üretimi otomatikleştirmek için dmv / information_schema karşı bir sorgu kullanırdım.
  • Özel bileşen kurulumu yok. Açık kaynak yüklemenin verboten olduğu yerlerde çalıştım. Orada kodunuzu korumak için aynı uygulamayı yüklemek için artık "herkesin" ihtiyaçlar gibi üçüncü parti uygulama yüklemenin bir ertelenmiş bakım maliyeti de ve o sunucularda yüklü almak gerekiyor ve Eminler geçerli olmak üzere meclisleri inceleyerek INFOSEC ihtiyaçlarına ve seni geride bırakan bir milyon insanın imzalarına ihtiyacımız var ...

1
"RDC alternatifi" - RDC nedir? Bir sonraki cevaba okuduğumda, Veri Bileşenini Değiştirmek anlamına gelebileceğini düşünüyorum, ancak orijinal yazının yazarı bu bileşenden bahsetmediğinden, bir kısaltma için çok erken olabilir. :-)
Thronk

RSI hakkında konuşmak , argümanlar önde CONVERTolduğu için 50 kat daha kolay yapıştırılmalıdırCAST
Patrick Honorez


2

Yalnızca "Unicode dize (DT_WSTR)" yerine "dize (DT_STR)" veya tam tersi olarak değiştirmeniz gerekiyorsa, bunu yapabilirsiniz:

  1. Package.dtsx- dosyanızın bir kopyasını kaydedin (kurtarmanız gerekiyorsa)
  2. Package.dtsx dosyasını bir düzenleyicide açın veya MS Visual Studio'da pakete sağ tıklayın ve "Kodu Görüntüle" yi seçin. Bir XML Dosyası göreceksiniz.

DTS:DataType= = 130 ile devam ediyorsa dizeyi arayın , sonra Sütun DT_WSTR (unicode) olarak tanımlanır.

Ardından = "129" gelirse, Sütun DT_STR (unicode olmayan) olarak tanımlanır, aramayı kullanın ve dikkatli bir şekilde değiştirin (daha önce bir kopya yaptınız, değil mi?)

Dosyayı kaydedin ve belki de bu oldu.


1
DBA SE'ye hoş geldiniz! Profesyonel ipucu: Site, yayınlarınızı daha iyi görünmesi için çeşitli metin biçimlendirme özelliklerine sahiptir. Editör metin kutusunun üstündeki simgeleri kullanın.
peterh - Monica'yı geri yükle
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.