Schlagwort-Archive: Aggregate

SSIS: Achtung bei Groß- und Kleinschreibung – AGGREGATE

Der SQL-Server unterscheidet (im Standard) bei den Daten nicht zwischen Groß- und Kleinschreibung.

Gerade für versierte SQL-Entwickler führt dies bei der Verwendung der Integration Services zu Schwierigkeiten, da Integration Services sehr wohl zwischen Groß- und Kleinschreibung unterscheidet. Somit verhalten sich SSIS-Transformationen leicht anders als ihre SQL-Pendants:

Ich möchte auf die SSIS-Transformationen Aggregation (Aggregate) und die Suche (Lookup) [im nächsten Blog-Eintrag] eingehen:

Zunächst vergleiche ich die SSIS-Transformation Aggregate mit dem SQL-Befehl GROUP BY:

Als Ausgangsdaten verwende ich die Tabelle CustomersTabelle Customers

Damit liefert das SQL-Statement

SELECT Country, count(*) as Anzahl
FROM Customers
Group by Country

folgendes Ergebnis (de=DE im SQL Server):

Bild

Die naheliegende SSIS-Transformation liefert aber (de <> DE im SSIS):

Bild

Hierbei habe ich das Standard-Verhalten der Tools dargestellt. Man kann aber in beiden Produkten ein gleiches Verhalten erzeugen:

  • Im SQL Server könnte man die Collation Spalte ändern, so dass die Werte auch Groß- und Kleinschreibung unterscheidet, also zum Beispiel Latin1_General_CS_AS
    Bild
    Diese Änderung betrifft natürlich die komplette Tabelle und somit alle Abfragen auf diese Tabelle!
  • Wenn man nur diese eine Abfrage im SQL auf „Beachte Groß- und Kleinschreibung“ setzen will, so kann man folgendes Statement verwenden:
    SELECT Country , count(*) as Anzahl
    FROM (select country COLLATE Latin1_General_CS_AS as Country, CustomerName FROM Customers) as tab
    Group by Country
    Ohne die Verwendung von Derived Tables (dem obigen „SubSelect“) bzw. Common Table Expressions geht es nicht. Ein Statement wie
    SELECT Country COLLATE Latin1_General_CS_AS, count(*) as Anzahl
    FROM Customers
    Group by Country
    liefert also immer noch 5 Zeilen.
  • In der SSIS-Transformation Aggregate kann man einstellen, dass die Groß- und Kleinschreibung ignoriert werden soll:
    Bild