Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
执行SSIS包时出现mysql错误_Mysql_Sql Server_Ssis - Fatal编程技术网

执行SSIS包时出现mysql错误

执行SSIS包时出现mysql错误,mysql,sql-server,ssis,Mysql,Sql Server,Ssis,我正在使用SSIS将数据从MSSQL传输到MySQL。我已经完成了所有表的映射。但是在执行包时,我遇到了错误: [tabl_name[1056]]错误:数据插入期间发生异常,提供程序返回的消息为:错误[07006][MySQL][ODBC 3.51驱动程序][mysqld-5.1.33-community-log]受限数据类型属性冲突(SQL_C_数值) [产品[402]]错误:数据插入期间发生异常,从提供程序返回的消息是:无法将类型为“System.Int32”的对象强制转换为类型为“Syst

我正在使用SSIS将数据从MSSQL传输到MySQL。我已经完成了所有表的映射。但是在执行包时,我遇到了错误:

[tabl_name[1056]]错误:数据插入期间发生异常,提供程序返回的消息为:错误[07006][MySQL][ODBC 3.51驱动程序][mysqld-5.1.33-community-log]受限数据类型属性冲突(SQL_C_数值)

[产品[402]]错误:数据插入期间发生异常,从提供程序返回的消息是:无法将类型为“System.Int32”的对象强制转换为类型为“System.Char[]”

我还比较了所有列的数据类型,发现它们是相同的。 之后,我做了一些研究,发现数据类型decimal(10,2)存在问题,但我无法找到解决方案


提前感谢。

解决此类问题的一个简单方法是临时将有问题的列从decimal转换为varchar,完成迁移后,将其转换回decimal


上述情况适用于MSSQL,因为MSSQL会投诉错误

在数据流任务中使用数据转换,或在源查询中强制转换无效类型

DECLARE @bit as bit set @bit = 1 SELECT CAST(@bit as int) 将@bit声明为bit 设置@bit=1 选择强制转换(@位为int)
从Access转换到ODBC时,我遇到了相同的错误(在64位上,MS JET将不再运行)。我的FldSeqnr字段为十进制(15,0) 定义:

        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())

我知道它很满,但它可以工作:错误只出现在第一个ExecuteReader上。其他人都很好。

我这周也头疼得厉害。我尝试了很多方法。谢天谢地,最后,他们中的一个成功了。希望能对你有所帮助

对于数据类型为Int、datetime、decimal…的一些列,这里我将其标识为ColumnA,并将其用作datetime类型

  • 在数据流源中,使用SQL命令检索数据。类似 挑选 isnull(ColumnA,'1800-01-01')作为ColumnA, C1, C2, ... Cn 从桌子上
  • 确保对前面提到的数据类型的所有列使用Isnull函数

  • 执行SSIS包。它应该会起作用

  • 返回到控制流,在数据流任务下,添加SQL任务控件以替换返回的数据。我的意思是,再次将ColumnA从'1800-01-01'更新为null


  • 这对我很有用。在我的情况下,我不能使用忽略失败选项。因为如果我这样做,我将丢失数千行数据。

    是的..我认为相同的解决方案…但问题是我无法更改MS SQL表..因此需要找到某种方法来操作MySQL。我还发现问题在于位数据类型,在MSSQL中,它显示的是true和false,而不是0 n 1,因此,我将数据类型更改为varchar,并尝试了所有可能的方法,但没有成功…因此我正在寻找与MS SQL位数据类型等效的MYSQL..thanksmysql没有位数据类型(最接近的是int)是的…这就是…我将数据类型更改为int,但它无法工作…我尝试了其他数据类型,如varchar,二进制tinyint和boolean…仍然没有答案…非常好奇知道什么是破解…谢谢你的回答。得到破解…有一个选项说忽略失败…之后它现在工作正常:)谢谢。