2011-01-03 16 views
1

Ich tansfering Daten von MSSQL zu MySQL SSIS.I mit Kartierung aller tables.But getan haben, während das Paket Ausführung Ich bin immer Fehler:mysql Fehler während der Ausführung von SSIS-Paket

[tabl_name [1056]] Error: An exception has occurred during data insertion, the message returned from the provider is: ERROR [07006] [MySQL][ODBC 3.51 Driver][mysqld-5.1.33-community-log]Restricted data type attribute violation(SQL_C_NUMERIC)

[product [402]] Error: An exception has occurred during data insertion, the message returned from the provider is: Unable to cast object of type 'System.Int32' to type 'System.Char[]'.

Ich verglich auch die Datentyp aller Spalten und ich fand es gleich. Danach habe ich etwas recherchiert und festgestellt, dass es ein Problem mit dem Datentyp dezimal (10,2) gibt. Aber ich finde die Lösung nicht.

Vielen Dank im Voraus.

Antwort

0

Eine einfache Möglichkeit, aus dieser Art von Problem zu entfernen, ist die temporäre Konvertierung dieser problematischen Spalte von dezimal zu varchar, nach Abschluss der Migration, konvertieren Sie es zurück in Dezimal.

Die oben genannten können für MSSQL gelten, da der Fehler bei MSSQL beschwert ist.

+0

Yes..I dachte die gleiche Lösung ... aber Problem ist, ich nicht MS SQL table..so someway finden müssen ändern können MySQL.Also zu manipulieren, dachte ich, dass Problem mit BIT-Datentyp ist out, in MSSQL es zeigt true und false anstelle von 0 n 1, also habe ich meinen Datentyp in varchar geändert und alle Möglichkeiten ausprobiert, aber keinen Erfolg ... also suche ich nach MYSQL-Äquivalent für den MS SQL-Bit-Datentyp ..danke – Dharmesh

+0

mysql hat nicht BIT Datentyp (am nächsten ist int) – ajreal

+0

Ja ... das ist was .... Ich änderte den Datentyp in INT, aber es funktioniert nicht .... Ich versuchte mit anderen Datentypen wie Varchar, binär Tinyint und Boolean ... immer noch keine Antwort ... sehr neugierig zu wissen, was ist der Hack..danke für die Antwort. – Dharmesh

0

Verwenden Sie entweder eine Datenkonvertierung in der Datenflusstask oder geben Sie ungültige Typen in die Quellabfrage ein.

 
DECLARE @bit as bit 
set @bit = 1 
SELECT CAST(@bit as int) 
0

Ich habe den gleichen Fehler beim Konvertieren von Access zu ODBC (auf 64-Bit MS JET wird nicht mehr gehen). Mein FldSeqnr Feld ist dezimal (15,0) Definition:

 Dim gtSelectSQL As String = "SELECT FldText FROM Data WHERE CollCode = ? AND CollSeq = ? AND FldCode = ? AND FldSeqnr = ?" 
     Dim DRgtSelect As odbcDataReader = Nothing 
     Dim DbCgtSelect As odbcCommand 
     Dim gtSelP1 As New odbcParameter("@CollCode", odbc.odbcType.VarChar, 4) 
     Dim gtSelP2 As New odbcParameter("@CollSeq", Odbc.OdbcType.Int, 4) 
     Dim gtSelP3 As New odbcParameter("@FldCode", odbc.odbcType.VarChar, 4) 
     Dim gtSelP4 As New odbcParameter("@FldSeqnrs", odbc.odbcType.Decimal, 16) 
     DbCgtSelect = New odbcCommand(gtSelectSQL, DbConn) 
     Dim NrErr As Integer = 0 
    Retrysql: 
    Try  
     dSelP1.Value = CollCode 
     dSelP2.Value = CollSeq 
     dSelP3.Value = p.FldCode 
     dSelP4.Value = strt 
     dSelP5.Value = endn 
     DRdSelect = DbCdSelect.ExecuteReader() 
     Do While (DRdSelect.Read()) 
      ... 
     End Do 
    Catch ex As Exception 
     If ex.Message.Substring(0, 13) = "ERROR [07006]" Then 
      If NrErr = 0 Then 
       NrErr += 1 
       GoTo retrySql 
      End If 
     End If 
     MsgBox(ex.ToString()) 

Ich weiß, es ist schrecklich, aber es funktioniert: der Fehler erscheint nur auf den ersten ExecuteReader. Alle anderen gehen gut.

0

Ich habe diese Woche die gleichen großen Kopfschmerzen. Ich habe viele Wege ausprobiert. Gott sei Dank, einer von ihnen hat gearbeitet. Hoffe es könnte dir ein bisschen helfen.

Für einige Spalten mit dem Datentyp von Int, datetime, decimal .... habe ich hier als ColumnA identifiziert, und ich habe es als Datetime-Typ verwendet.

  1. Verwenden Sie in der Datenflussquelle den SQL-Befehl zum Abrufen von Daten. Sth wie wählen isnull (Columna, '1800.01.01') als ColumnA, C1, C2 , ... Cn aus Tabelle

Stellen Sie sicher, Isnull Funktion für alle Spalten verwenden mit dem zuvor erwähnten Datentyp.

  1. Führen Sie das SSIS-Paket aus. Es sollte funktionieren.

  2. Gehen Sie zurück zu Kontrollfluss, fügen Sie unter der Datenflusstask das SQL-Tasksteuerelement hinzu, um die Daten zurück zu ersetzen. Ich meine, aktualisieren Sie die SpalteA von '1800-01-01' wieder auf null.

Das funktioniert für mich. In meiner Situation kann ich die Option Fehler ignorieren nicht verwenden. Denn wenn ich das tue, verliere ich Tausende Datenzeilen.

Verwandte Themen