Select CAST(de.ornum AS numeric) + 1 as ornum2 from Cpaym as de left outer join Cpaym as de1 on CAST(de.ornum AS numeric) = de1.ornum where ISNUMERIC(de.ornum) = 1
我正在尝试获取缺少的序列号,但出现错误:
消息8114,级别16,状态5,第1行将数据类型varchar转换为数值时出错。
您CAST()的联接谓词中有一个,该谓词在WHERE子句之前进行评估。如果de.ornum不是数字,则此转换将失败。
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。
IsNumeric()
您可以做几件事:
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 de LEFT OUTER JOIN ...