利用sql工具和网络资源处理科目自定义项引发数据二进制排序问题用友软件股份有限公司145号工程师2009年7月20日在sql2000+sp4及8.72版无补丁环境下,测试客户问题过程中无意发现999演示帐套有这样一种情况。一个受控应付系统的供应商往来科目,增加两个自定义项,自定义项-单据头中对自定义项1和2分别定义项目名称,建立档案后,付款单录入时,供应商参照提示:无法解决equalto操作的排序规则冲突。随着点击基础档案中的供应商档案和客户档案均提示:-2147217900(80040e14),无法解决equalto操作的排序规则冲突。问题现象怀疑与数据库**排序规则有关,于是启用事件探查器进行跟踪。事件探查器中新建事件跟踪,这里介绍一下我跟踪事件的一个小窍门,取消事件审核和会话跟踪,以缩小跟踪查找范围,尽快定位问题。出现错误提示后立即停止跟踪,减少不必要的跟踪显示。此时跟踪结果如图:鉴于对档案的查询,定位语句从select开始,通常后面的语句接近问题原因的所在,因此从后向前排查,找突破口,如最后一条语句:select*fromSetNocountonDeclare@ColumnSetTable….问题分析将最后一条语句复制黏贴到查询分析器中,选择999帐套,执行语句的结果如图:•双击‘在关键字‘set’附近有语法错误’行,结果如图:•根据结果分析判断可能setNocounton.有问题,回来查看事件探查器中刚才分析语句的上一条语句与setNocounton.有关,在查询分析器中执行一下该语句,结果如图:此时显示的错误提示与测试问题时出现的报错一致,到此问题定位工作已完成,但不知如何解决?寻求百度提供些思路,在百度中搜索‘无法解决equalto操作的排序规则冲突’,该错误因向数据库表中写入记录时,缺少二进制排序规则,摘自百度分析处理中的一个语句:selectman_id,man_name,man_statu,man_ic_idfromic_et..man_archivewhereman_idOLLATEChinese_PRC_CS_ASnotin(selectbieminCOLLATEChinese_PRC_CS_ASfromemployee)根据以上语句的语法结构,结合本案例上图分析,语句WhereD.cKey=‘Vendor’andD.LocaleID=‘zh-CN’andNotD.cFldin(SelectcFldfrom@ColumnSet)end可能有问题,应该是该语句中缺少排序规则,尝试在in前面黏贴上collateChinese_PRC_CI_AI_WS,点击执行,结果如图:问题处理•再来查询供应商档案,一切正常。客户档案的处理方法与供应商档案的处理方案一致。•最后,从作为一线人员的角度谈谈分析处理数据问题的一点体会。•1.对于软件中一些不常见的数据问题,大家都知道使用事件探查器和查询分析器处理。可是面对跟踪结果中的众多语句,如何查找问题?首先,针对软件中执行的功能,确定要查找语句的范围。例如本案例中查询客商档案,首先考虑从后向前排查select*from…结构的语句,然后,根据每一步分析结果,在已发现问题的语句上下范围内查找问题。总结2.当得到分析结果不是字段或一些语法错误时,像本案例中的错误提示,没有解决方案该如何处理?可以借助网络资源获取一些信息,例baidu或google,或许能帮助我们解决问题。