【问题标题】:Preserving data format Decimal(6,5) from vba to sql将数据格式 Decimal(6,5) 从 vba 保留到 sql
【发布时间】:2017-10-19 15:45:43
【问题描述】:

我正在使用 VBA 和存储过程将数据从 Excel 移动到 SQL。我的字段 Sensor_Measure 之一是 SQL 中的数据类型 Decimal(6,5)。存储过程是这样的:

Alter Procedure dbo.SP_Sensor  
(  
@Name varhchar(4),    
@Sensor_D varchar(10)  
)  
Declare  
@iSensor Decimal(6,5)  
@iSensor=@Sensor  
Insert into dbo.SensorTble Values(@Name,@iSensor )

我的 VBA 代码是这样的:

Dim Name, Sensor as String  
Dim oName, oSensor as ADODB.Parameter  

Name=ws.Cells(2,3)  
Sensor=ws.Cells(4,5)   
Set oSensor = cmd.CreateParameter("@Sensor_D", adVarChar, adParamInput, 30, Sensor)
        cmd.Parameters.Append oSensor  
cmd.Execute

在 Excel 工作簿中,传感器的数据点是

0.000121778

但是当它转到sql时它看起来像这样

1.21778

我应该看的是

0.00012

。我哪里错了。

【问题讨论】:

  • 查看您的 CreateParameter 调用 - 您将其传递为 adVarChar(30) 而不是 adDecimal
  • @Dai 是的,我在 SQL 中进行所有转换以减少 VBA 中的调试。无论如何,我确实尝试了使用 NumericScale 和 Precision 的 adDecimal,但得到了“Invalid Scale Value”错误
  • 我建议预先转换数据,并且只处理从 Excel 到 SQL Server 传递 Decimal 类型的数据。
  • @HardCode 在 Excel 中推荐转换的原因是什么?
  • 在传递字符串数据类型时有更多的错误空间,需要最终转换为小数,整个链条都很长。例如,如果您一开始就转换为 Decimal,则可以避免“Excel 正在向 SQL 发送 1.223523515E-4”的问题。

标签: sql sql-server vba sqldatatypes


【解决方案1】:

Excel 将 1.223523515E-4 发送到 SQL,而 SQL 没有识别 E-4 部分并给了我 1.22。所以我在 Excel 中做了这个:

SENSOR_ = Format(ws.Cells(4, 5), "0.######")  

这解决了我的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多