【发布时间】: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