将文本自动转换为十进制数 - 访问

时间:2013-07-01 07:11:09

标签: ms-access data-conversion

我正在尝试使用ODBC将数据从MS SQL Server数据库导入MS Access。 对于大多数所有数据类型,导入都是正确的映射类型,但是当SQL Server列数据类型为十进制数时,MS Access会将其转换为text数据类型。 所以我试图找到一个适当的解决方法,自动将此文本转换为十进制数。

例如: 一个价格以“3978.76821”形式出现,数据类型设置为文本,因此我无法在该字段上运行简单计算。

Screenshot showing data in both SQL server and MS Access

1 个答案:

答案 0 :(得分:3)

Access正在将decimal(31,7)列转换为Text(31),因为Access Decimal列的最大精度为28.我通过导入以下SQL Server表来确认:

CREATE TABLE [dbo].[importTest](
    [seq] [int] NULL,
    [textCol] [nvarchar](50) NULL,
    [decimalCol] [decimal](31, 7) NULL
) ON [PRIMARY]

解决方法1:

在SQL Server上创建一个视图,以“缩小”有问题的列...

CREATE VIEW dbo.importTestForAccess AS
SELECT seq, textCol, 
    CONVERT(decimal(28,7), decimalCol) AS decimalCol
FROM dbo.importTest

...然后导入View而不是Table。

解决方法2:

像以前一样导入表格,然后通过VBA将列中的文本从Access转换为Decimal

CurrentProject.Connection.Execute _
        "ALTER TABLE dbo_importTest " & _
        "ALTER COLUMN decimalCol DECIMAL(28,7)"