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