添加ORDER BY时出现“SQL0802 - 数据映射错误的数据转换”异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加ORDER BY时出现“SQL0802 - 数据映射错误的数据转换”异常相关的知识,希望对你有一定的参考价值。
我偶尔遇到的情况(不是所有数据集)我得到“错误:SQL0802 - 数据转换或数据映射错误。”将ORDER BY添加到简单查询时的异常。例如,这有效:
SELECT
market,
locationCode,
locationName
FROM locations
以下是悲惨的失败:
SELECT
market,
locationCode,
locationName
FROM locations
ORDER BY locationName
我得到:错误:SQL0802 - 数据转换或数据映射错误。 (状态:S1000,原生代码:FFFFFCDE)
如果我尝试按名称,人口或任何真正的方式进行排序,我会得到同样的错误....但有时候,这意味着,当它在名称或代码上出错时,如果按位置子集中的任何字段排序,则会出错。如果它适用于特定的位置子集,则它适用于任何排序顺序。
任何字段中都没有空值,代码和名称字段是字符字段。
最初,当我添加ROW_NUMBER列时出现此错误:
ROW_NUMBER() OVER(PARTITION BY market ORDER BY locationCode) as rowNumber
因为,我把它缩小到订单失败的情况。我不知道要用哪个方向。有什么想法吗?
更新:位置名称字段没有空白值。即使我删除了此子集中的所有字段,只留下7位数字ID并按该字段排序。我仍然得到同样的错误。
WITH locs as (
SELECT id
FROM locations
)
SELECT *
FROM locs
ORDER BY id
当我从子集中选择DISTINCT任何字段时,我收到此错误。
我有/所描述的完全相同的情况。错误似乎是随机的,但在添加排序时总会出现。虽然我无法准确描述技术细节,但我认为发生的是“随机性”实际上是由于表的大小以及查询返回行的缓存块的大小。
问题的实际原因是连接使用的关键字段中的垃圾值和/或空白。如果没有排序,并且第一批缓存的结果没有打到带有坏字段的记录,则错误最初不会发生......但最终总是会发生错误。
并且总是立即引出错误的两件事是对结果进行排序或分页。这是因为为了排序,它必须击中每个关键字段,然后缓存完整的结果。我认为。就像我说的那样,我不知道完整的技术,但我很确定这与laygeek术语相近。
我能够通过强制将键列强制转换为整数来解决错误。我改变了这个联接......
FROM DAILYV INNER JOIN BXV ON DAILYV.DAITEM=BXV.BXPACK
......对......
FROM DAILYV INNER JOIN BXV ON CAST(DAILYV.DAITEM AS INT)=CAST(BXV.BXPACK AS INT)
......而且我没有必要对表格进行任何更正。这是一个非常古老,非常混乱的数据库,里面有很多垃圾。已经进行了更正,但这是一项正在进行中的工作。
以上是关于添加ORDER BY时出现“SQL0802 - 数据映射错误的数据转换”异常的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL 语句中使用 Order by 时出现“参数 xxx 没有默认值”错误
执行SQL时出现: ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
在 Toad for Sql Server 2016 中使用带有 Union All 的 Order By 子句时出现奇怪的语法错误
sqli-labs less46 GET -Error based -Numeric -Order By Clause(GET型基于错误的数字型Order By从句注入)