您
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 ...
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)