您好我有,我想,以确保它是只在存储过程的数值的数值。 我有以下代码
if (IsNumeric(myField) =0)
begin
--does some work
end;
它应该检查MyField的,如果数量为非数字,如果不是,它只是继续它的工作。 出于某种原因,上面的代码抛出错误。 不知道如何解决这个问题。 错误是异常被抛出的varchar为int。 请让我知道,谢谢
您好我有,我想,以确保它是只在存储过程的数值的数值。 我有以下代码
if (IsNumeric(myField) =0)
begin
--does some work
end;
它应该检查MyField的,如果数量为非数字,如果不是,它只是继续它的工作。 出于某种原因,上面的代码抛出错误。 不知道如何解决这个问题。 错误是异常被抛出的varchar为int。 请让我知道,谢谢
你的表达是有效的,我怀疑你越来越被认为是由功能的数字值,但不能转换为整数。 请尝试以下...
declare @myfield varchar(20)
set @myfield='.'
if ISNUMERIC(@myfield)=1
begin
select CONVERT(int,@myField)
end
转换语句将炸毁您所报告的错误...
检查这个问题了: T-SQL -确定值是否为整数
不能被转换为整数的“数字”的值更多的例子
select '1.e0',ISNUMERIC('1.e0') as IsNum
union
select '.',ISNUMERIC('.') as IsNum
union
select '12.31',ISNUMERIC('12.31') as IsNum
添加一个选择convert(int,myField)
在begin/end
,看看实际的字段值导致错误发生
正如其他人所指出的那样, isnumeric()
将在场合字符串不能转换返回1。
对于一个正整数以下测试:
where myfield not like '%[^0-9]%'
为正整数或浮点数以下测试:
where myfield not like '%[^0-9.]%' and myfield not like '%.%.%'
作为一个说明,这些方法都没有测试数值溢出。 您可以测试与类似:
where myfield not like '%[^0-9]%' and len(myfield) <= 10 and myfield <= '2147483647'
(假设没有前导零)。
检查它像这个:
if (IsNumeric(myField))
begin
--does some work
end;