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
我正在尝试获取丢失的序列号,但是我收到了错误
Msg 8114,Level 16,State 5,Line 1将数据类型varchar转换为numeric时出错。
有人能帮助我吗?
答案 0 :(得分:2)
您的连接谓词中有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 de
LEFT OUTER JOIN ...