none
SSIS inner join liefert anderes Ergebnis als T-SQL RRS feed

  • Frage

  • Hallo zusammen,

    ich wollte zwei Tabellen im SSIS mit Hilfe des "zusammenführungsjoin" inner join verknüpfen.

    Die Felder haben den gleichen Datentyp nvarchar(150) und werden vor dem join sortiert.

    Aber wieso bekomm ich ein andere Ergebnis wenn ich das ganze als T-SQL im Management Studio mache?

    table1 inner join table2 on table1.column1 = table2.column1  (29.194 Ergebnisse)

    ssis (29.175 Ergenisse)

    (Sry bin neu auf diesem Gebiet aber gibt es eine Möglichkeit die Daten die nicht gejoint wurden anzuzeigen?)

    Beste Grüße

    Thomas

    Donnerstag, 31. Januar 2013 16:11

Antworten

  • ANSI_PADDING ist in beiden Tabellen gleich.

    Den JOIN in SSIS mach ich über die Componenten.

    Die Tabellen liegen auch in der gleichen Datenbank. Es gibt in der Vergleichsspalte 7 NULL-Werte , die er ja auch korrekt auslassen soll aber nicht insgesamt 19

    Könnte es vielleicht daran liegen, dass eventuell einige dieser Spalten via T-SQL bearbeitet oder eingefügt wurden, und nicht über die Oberfläche? Aber dann sollte er doch die Werte bei dem T-SQL Befehl auch nicht joinen?!

    -------------------------------------------------------

    Problem gelöst: Es gab einige Datensätze mit Leerzeichen am Ende und diese hat er beim Vergleich hinzugezogen und deswegen nicht gejoint.

    Komisch, dass er bei T-SQL dieses ignoriert und über Componenten in der SSIS nicht.

    • Bearbeitet tombow989 Freitag, 1. Februar 2013 10:13
    • Als Antwort markiert tombow989 Freitag, 1. Februar 2013 10:13
    Freitag, 1. Februar 2013 06:22

Alle Antworten

  • hast Du ANSI_PADDING auf der Textspalte in beiden Tabellen gleich gesetzt ?

    abhaengig welche Settings Du eingestellt hast resp. welche Datenquelle benutzt, werden Strings noch gepaddet.

    wie machst Du den JOIN in SSIS ? direkt als SELECT Anweisung einer Datenquelle oder machst Du den Join via SSIS Componente ?


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.

    Donnerstag, 31. Januar 2013 19:18
  • ANSI_PADDING ist in beiden Tabellen gleich.

    Den JOIN in SSIS mach ich über die Componenten.

    Die Tabellen liegen auch in der gleichen Datenbank. Es gibt in der Vergleichsspalte 7 NULL-Werte , die er ja auch korrekt auslassen soll aber nicht insgesamt 19

    Könnte es vielleicht daran liegen, dass eventuell einige dieser Spalten via T-SQL bearbeitet oder eingefügt wurden, und nicht über die Oberfläche? Aber dann sollte er doch die Werte bei dem T-SQL Befehl auch nicht joinen?!

    -------------------------------------------------------

    Problem gelöst: Es gab einige Datensätze mit Leerzeichen am Ende und diese hat er beim Vergleich hinzugezogen und deswegen nicht gejoint.

    Komisch, dass er bei T-SQL dieses ignoriert und über Componenten in der SSIS nicht.

    • Bearbeitet tombow989 Freitag, 1. Februar 2013 10:13
    • Als Antwort markiert tombow989 Freitag, 1. Februar 2013 10:13
    Freitag, 1. Februar 2013 06:22
  • Problem gelöst: Es gab einige Datensätze mit Leerzeichen am Ende und diese hat er beim Vergleich hinzugezogen und deswegen nicht gejoint.

    Komisch, dass er bei T-SQL dieses ignoriert und über Componenten in der SSIS nicht.

    schau hier http://support.microsoft.com/kb/316626 (SQL Server Verhalten)

    for example, Transact-SQL considers the strings 'abc' and 'abc ' to be equivalent for most comparison operations.

    und http://msdn.microsoft.com/en-us/library/ms141673%28v=sql.105%29.aspx(SSIS Verhalten)

    The expression evaluator does not check if a string contains leading and trailing spaces, and it does not pad strings to make them the same length before it compares them

    dh. das Verhalten ist dokumentiert!


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.

    Freitag, 1. Februar 2013 20:36