2

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

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

显示 SQL Server 和 MS Access 中数据的屏幕截图

4

1 回答 1

3

Access 正在将该decimal(31,7)列转换为,Text(31)因为 AccessDecimal列的最大精度为 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

...然后导入视图而不是表。

解决方法 2:

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

CurrentProject.Connection.Execute _
        "ALTER TABLE dbo_importTest " & _
        "ALTER COLUMN decimalCol DECIMAL(28,7)"
于 2013-07-01T11:35:18.163 回答