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 转换为数字时出错。
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
不是数字,则此转换将失败。
此外,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 ...