奇怪的“返回的数据与列的预期数据长度不匹配”错误,而预期长度要大得多 - SQL SERVER 2012
Posted
技术标签:
【中文标题】奇怪的“返回的数据与列的预期数据长度不匹配”错误,而预期长度要大得多 - SQL SERVER 2012【英文标题】:Weird 'returned data that does not match expected data length for column' error while the expected length is much bigger - SQL SERVER 2012 【发布时间】: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 数据库
是什么导致了这个问题?是因为某些字符不允许使用还是..?
【问题讨论】:
可能的关系:***.com/questions/4215979/… 或 ***.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 代码是什么,并确定如何处理它。如果您真的不在乎,请将数据复制并粘贴到记事本中,然后将其复制并粘贴为更新,那么它应该可以工作。记事本通常会删除编码
【参考方案1】:
有 1 条记录产生了错误。我用 TOP select 和 DESC Select 确定了确切的记录,然后使用 select ascii replace
删除错误!感谢 xQbert 解决了,再次感谢您!
【讨论】:
以上是关于奇怪的“返回的数据与列的预期数据长度不匹配”错误,而预期长度要大得多 - SQL SERVER 2012的主要内容,如果未能解决你的问题,请参考以下文章