【发布时间】:2015-05-08 12:58:44
【问题描述】:
在我的项目中,我将 Access 数据库重建为 SQL 数据库。所以要做到这一点,我将访问数据传输到 SQL 数据库。我确保它们都具有相同的结构,并且在 SQL 数据库中正确修改了 Access 字段。
对于大多数数据,这是可行的。 除了 1 张桌子。这张表给了我以下奇怪的错误信息:
OLE DB provider 'Microsoft.ACE.OLEDB.12.0' for linked server 'OPS_JMD_UPDATE' returned data that does not match expected data length for column '[OPS_JMD_UPDATE]...[OrderStatus].Omschrijving'. The (maximum) expected data length is 100, while the returned data length is 21.
这里有更多关于 Access 和 SQL 字段/列的信息:
- 访问类型:短文本
- SQL 类型:nvarchar(MAX)
- 访问其中的列数据:普通字母和
&-%é+€.,:是“不正常的”。 - 一些空的访问记录(这是允许的)
- Access表共有135314条记录
我将 SQL 数据类型设置为 nvarchar(MAX),这样字段就永远不会太小,但这似乎没有帮助..
*OPS_JMD_UPDATE 是链接的 Access 数据库
是什么导致了这个问题?是因为某些字符不允许使用还是..?
【问题讨论】:
-
可能的关系:stackoverflow.com/questions/4215979/… 或 stackoverflow.com/questions/26022535/… 这里故事的士气是明确地将短文本转换为所需的数据类型。 MSFT Article 可能会有所帮助
-
试图投射它并查看其他问题(谢谢),但遗憾的是它没有效果。首先我尝试将其设置为 21 的特定长度,然后我尝试按如下方式进行转换:
INSERT INTO [OrderStatus]( [Omschrijving] ) SELECT CAST([Omschrijving] AS nvarchar(100)) FROM [OPS_JMD_UPDATE]...[OrderStatus] -
将插入限制为子集或仅几个特定记录。甚至 1. 这将有助于确定问题是出在特定记录(数据)还是连接/其他方面,然后我们可以仔细检查。
-
@xQbert 好主意!我做了一个 TOP 和 DESC 来确定它给出错误的确切记录。这似乎只是一个记录。然而奇怪的是,它似乎没有任何问题......它在产生错误的列中没有任何价值......(像许多其他人一样)。其他字段似乎与特定记录一样好。
-
我会说有一个不遵循正确编码的非显示字符。它看起来像一个空间,但实际上不是。写一个选择尝试用''空字符串替换所有空格。任何作为“空格”留下的都是我正在谈论的数据。从那里您可以使用ASCII() 找出该字符的Ascii 代码是什么,并确定如何处理它。如果您真的不在乎,请将数据复制并粘贴到记事本中,然后将其复制并粘贴为更新,那么它应该可以工作。记事本通常会删除编码
标签: sql-server database ms-access