消息8114,级别16,状态5,第1行将数据类型varchar转换为数值时出错

消息8114,级别16,状态5,第1行将数据类型varchar转换为数值时出错,第1张

消息8114,级别16,状态5,第1行将数据类型varchar转换数值时出错

CAST()
的联接谓词中有一个,该谓词在
WHERe
子句之前进行评估。如果
de.ornum
不是数字,则此转换将失败。

同样,

IsNumeric()
它不能捕获所有的数值类型,但是在大多数情况下可能已经足够了。这里的文档:http://technet.microsoft.com/en-
us/library/ms186272(v=sql.105).aspx
这里是一个描述与问题有关的文章(许多)
IsNumeric()
:HTTP://
classicasp。 aspfaq.com/general/what-is-wrong-with-
isnumeric.html

您可以做几件事:

  • 修复您的架构,以使名为的列
    ornum
    实际上在所有具有该名称的表中都包含一个数字。
  • CASE
    在连接谓词中使用表达式(速度慢,但是可以使用):
    ... ON CASE WHEN ISNUMERIC(de.ornum) = 1 THEN CAST(de.ornum AS numeric) ELSE NULL END = de1.ornum
  • 使用派生表在连接之前进行预转换(也很慢,但可能不太慢-检查执行计划)

代码:

FROM (  SELECt de.ornum    FROM Cpaym AS de   WHERe IsNumeric(de.ornum) = 1) AS deLEFT OUTER JOIN ...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5602053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存