【问题标题】:"Error converting data type varchar to numeric" when I export data from Excel to SQL Server using VBA使用 VBA 将数据从 Excel 导出到 SQL Server 时出现“将数据类型 varchar 转换为数值时出错”
【发布时间】:2019-03-30 15:30:35
【问题描述】:

我在 Excel 中创建了一个宏来从 SQL Server 导入和导出数据。但是,当我尝试导出数据时,它会引发错误

[Microsoft][ODBC SQL Server 驱动程序][SQL Server]
将数据类型 varchar 转换为数值时出错

当我导出整数时,代码运行良好。当我尝试导出实数时出现错误。

Dim gil, gibnr, gul, fil, fibnr, ful, qil, qibnr, qul, xil, xibnr, xul, oil, oibnr, oul, cil, cibnr, cul, nil, nibnr, nul, bul, hul, lul, indul As Long


conn.Execute "insert into dbo.Intl_LL (UWU,OBU,Profile_ID, Insured_name,   Claim_number,Claim_desc,  Event_Name,   UY, AY, AQ, Date_of_loss,   Region, CCY,    Policy_number,  Branch, LE, MPL,Claim_alert_email,     Comments,   [Large Profile Flag], [Earmark Flag],   [Tracked for Qtrly dev],  [Gross Incurred], [Gross IBNR], [Gross Ultimate], [FAC Incurred],   [FAC IBNR],   [FAC Ultimate],   [QS Incurred],[QS IBNR],[QS Ultimate],[XOL Incurred],[XOL IBNR],[XOL Ultimate],[Ceded OTH Incurred],[Ceded OTH IBNR],[Ceded OTH Ultimate],[Ceded Total Incurred],[Ceded Total IBNR],[Ceded Total Ultimate],[Net Incurred],[Net IBNR],[Net Ultimate],[Booked Ultimate],version)" & _
     "values ('" & sUWU & "', '" & sOBU & "','" & sProfile & "', '" & sInsured & "','" & sClaim & "','" & sClmdesc & "','" & sEvent & "','" & sUY & "','" & sAY & "','" & sAQ & "','" & sDOL & "','" & sRegion & "','" & sCCY & "','" & sPolnum & "','" & sBranch & "','" & sLE & "','" & sMPL & "','" & sClaimalert & "','" & sComm & "','" & sLargeF & "','" & sEarF & "','" & sTrackF & "','" & gil & "', '" & gibnr & "','" & gul & "','" & fil & "','" & fibnr & "','" & ful & "','" & qil & "','" & qibnr & "','" & qul & "','" & xil & "','" & xibnr & "','" & xul & "','" & oil & "','" & oibnr & "','" & oul & "','" & cil & "','" & cibnr & "','" & cul & "','" & nil & "','" & nibnr & "','" & nul & "','" & bul & "', '" & ver & "')"

我已确保 VBA 中具有 Long 数据类型的变量在 SQL Server 中为 numeric(7, 11) 类型。

请随时询问有关该问题的更多信息。谢谢。

【问题讨论】:

  • 您需要调试代码,因为没有人可以帮助您处理从前端页面传递的值?检查表的列数据类型以及该列对应的插入语句中的传递值是什么。
  • NUMERIC(7,11) 在 SQL Server 中的意思是:总共 7 位,其中小数点后 11 - 这看起来不像非常有用的数据类型.....我会尝试类似NUMERIC(20,6)或类似的东西,看看它是否有效......
  • Official documentation for the numeric datatype - 解释声明中的这两个数字意味着
  • 你声明了很多 Variants 并且只有一个 Long 变量,请像这样修正你的声明:Dim gil as Long, gibnr as Long, gul as Long, ... 如果你想要 Long vba 中的变量

标签: sql sql-server excel vba


【解决方案1】:

MySQL 必须假定这些值应该与“mycol”列的类型相同,并默默地转换它们。 - 当您尝试将 INT 与字符串进行比较时,它的作用相同。

但是,您应该尽量不要引用应该是数字的值。即使 MySQL 确实会自动转换其中的一些,它也会花费几个周期并且行为可能不一致。

底线:始终不加引号的数字,只引用字符串和日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多