2013-08-25 68 views
1

嗨我有一個值,我想確保它只是在存儲過程中的數字。我有以下代碼檢查數字驗證

if (IsNumeric(myField) =0) 
begin 
    --does some work 
end; 

應該檢查MyField的,如果數量爲非數字,如果不是,它只是繼續它的工作。 由於某些原因,上面的代碼拋出錯誤。任何想法如何解決這個問題。錯誤是該異常被引發varchar爲int。請讓我知道感謝

+0

你得到了什麼確切的錯誤? – Damith

+3

@ojhawkins - ['ISNUMERIC'](http://technet.microsoft.com/en-us/library/ms186272.aspx)返回一個'int' –

+0

你需要展示一些更相關的代碼。您向我們顯示的代碼不是引發錯誤的代碼。我們需要更多的上下文來看看你實際上在做什麼。 –

回答

1

檢查它像這樣代替:

if (IsNumeric(myField)) 
begin 
    --does some work 
end; 
+0

-1這是不正確的TSQL語法。 'IsNumeric'是返回「0」或「1」的函數。它不返回可以像那樣使用的布爾結果。 –

3

你的表達是有效的,我懷疑你越來越被認爲是由功能的數字值,但不能轉換成整數。請嘗試以下...

declare @myfield varchar(20) 
set @myfield='.' 
if ISNUMERIC(@myfield)=1 
begin 
    select CONVERT(int,@myField) 
end 

轉換語句將炸燬您所報告的錯誤...

檢查這個問題了: T-sql - determine if value is integer

「數字」的一些例子不能被轉換爲整數

select '1.e0',ISNUMERIC('1.e0') as IsNum 
union 
select '.',ISNUMERIC('.') as IsNum 
union 
select '12.31',ISNUMERIC('12.31') as IsNum 

值在添加選擇查看引起錯誤發生的實際字段值

2

正如其他人指出的,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' 

(假設沒有前導0)。