it-swarm.com.de

Konvertieren einer Nicht-Unicode-Zeichenfolge in eine Unicode-Zeichenfolge SSIS

Ich erstelle ein Paket, in das ich Daten aus einer Datenbank in eine leere Excel-Datei exportieren werde. Wenn ich nur die Quell- und Zielkomponenten hinzugefügt und das Paket ausgeführt habe, wurde ein Konvertierungsfehler angezeigt, der besagt, dass die Ausgabespalte und die Spalte "A" nicht zwischen Unicode- und Nicht-Unicode-Zeichenfolgendatentypen konvertieren können.

Um dies zu beheben, habe ich eine Datenkonvertierungskomponente hinzugefügt und alle Spalten in konvertiert

"Unicode-Zeichenfolge [DT_WSTR]"

und ich habe den Fehler nicht mehr erhalten. Das einzige Problem ist, dass ich ungefähr 50 Spalten hatte, in denen ich 1 zu 1 gehen und "Unicode String [DT_WSTR]" aus der Dropdown-Liste auswählen musste. Ich musste dann in die Zielkomponente gehen und die neu konvertierten Spalten meiner Excel-Datei zuordnen.

Meine Frage ist, ob jemand anderes darauf gestoßen ist. Gibt es einen effizienteren Weg, um alle manuellen Datentypkonvertierungen durchzuführen? Es scheint nicht praktisch zu sein, alle Spalten einzeln zu konvertieren und zuzuordnen, insbesondere wenn Sie eine große Anzahl von Zeilen haben.

Ich verstehe, dass Excel-Dateien nicht der beste Weg sind, um Daten zu importieren und zu exportieren, aber dies ist in diesem speziellen Fall erforderlich.

Ich könnte nach einer Möglichkeit suchen, einfach in eine flache Textdatei zu exportieren und dann als letzten Schritt im Paket zu versuchen, nach Excel zu konvertieren. Ich hoffe, dass dies nicht den gleichen Unicode/Nonunicode-Konvertierungsfehler auslöst.

9
Juan Velez

Als Alternative zu RDC überspringe ich einfach die Konvertierung der Datentypen in SSIS und wandle sie in meiner Quellabfrage explizit als nvarchar um.

Verwendungszweck

In Ihrer Quellabfrage (und Sie sind eine Quellabfrage verwenden und nicht einfach die Tabelle in der Dropdown-Liste auswählen) , wandle Dinge explizit auf eine geeignete Länge von n (var) char um.

Anstatt

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

verwenden Sie eine Abfrage wie

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

Die klugen Schüler von AdventureWorks werden erkennen, dass die Daten bereits vom Typ n(var)char waren, dies diente jedoch lediglich der Demonstration des Konzepts.

Leistungen

  • Weniger Speicher belegt. Derzeit würden Sie zwei Kopien der "gleichen" Daten mithilfe von Data Conversion Component In SSIS zuweisen und speichern
  • Nein RSI . Sie müssen nicht N-mal klicken und all diese Informationen in dem schrecklichen kleinen Editor angeben, den sie bereitstellen. Ich würde eine Abfrage für das dmv/information_schema verwenden, um die Generierung von "Excel ready" -Tabellenexporten weiter zu automatisieren.
  • Keine benutzerdefinierte Komponenteninstallation. Ich habe an Orten gearbeitet, an denen die Installation von Open Source verboten war. Es gibt auch verzögerte Wartungskosten für die Installation von Apps von Drittanbietern, da jetzt "jeder" dieselbe App installieren muss, um Ihren Code zu pflegen und Sie muss auf den Servern installiert werden und infosec muss die Baugruppen überprüfen, um sicherzustellen, dass sie gültig sind und wir brauchen Abmeldungen von einer Bajillion Menschen, die Ihnen überlegen sind ...
15
billinkc

Nativ gibt es keine Möglichkeit, das zu tun. Sie können jedoch - Ersetzen der Datenkonvertierungskomponente für SSIS von Codeplex herunterladen und dies auf einmal tun.

Weitere Infos finden Sie hier .

5
Kin Shah

Wenn Sie nur von "Unicode-Zeichenfolge (DT_WSTR)" zu "Zeichenfolge (DT_STR)" oder umgekehrt wechseln müssen, können Sie dies tun:

  1. Speichern Sie eine Kopie Ihrer package.dtsx-Datei (falls Sie sie wiederherstellen müssen)
  2. Öffnen Sie die package.dtsx in einem Editor oder klicken Sie in MS Visual Studio mit der rechten Maustaste auf das Paket und wählen Sie "Code anzeigen". Sie sehen eine XML-Datei.

Suchen Sie nach der Zeichenfolge DTS:DataType Wenn darauf = "130" folgt, wird die Spalte als DT_WSTR (Unicode) definiert.

Wenn darauf = "129" folgt, wird die Spalte als DT_STR (Nicht-Unicode) definiert. Verwenden Sie Suchen und Ersetzen mit Sorgfalt (Sie haben zuvor eine Kopie erstellt, oder?)

Speichern Sie die Datei und vielleicht war es das.

2
cjonas