我正在尝试使用ODBC将数据从MS SQL Server数据库导入MS Access。 对于大多数所有数据类型,导入都是正确的映射类型,但是当SQL Server列数据类型为十进制数时,MS Access会将其转换为text数据类型。 所以我试图找到一个适当的解决方法,自动将此文本转换为十进制数。
例如: 一个价格以“3978.76821”形式出现,数据类型设置为文本,因此我无法在该字段上运行简单计算。
答案 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)"