2013-04-24 59 views
2

如何使用ISNUMERIC()函數和sql_variant數據類型?使用帶有sql_variant的ISNUMERIC()SQL Server

這下面的代碼不起作用

DECLARE @x sql_variant 
SET @x = 3 
IF ISNUMERIC(@x) = 1 
SELECT 'Numeric' 
ELSE 
SELECT ' NOT' 

錯誤:

消息8116,級別16,狀態1,行4
參數的數據類型的sql_variant是的ISNUMERIC參數1無效功能。

但這部作品

IF ISNUMERIC(CAST(@x AS INT)) = 1 

是有做的任何方式這事與出CAST()

沒有發現任何東西就這個問題很有感謝在谷歌,我使用 SQL Server 2008 R2

+0

您是否試圖檢查_value_是數字,還是_underlying datatype_是數字類型?例如,'NVARCHAR''3'是否應該被視爲數字? – 2013-04-24 18:23:12

+0

菲利普答案適用於我現在有的情況,但它仍然沒有任何意義,這稱爲@x ='123'數字正確嗎? – 2013-04-24 18:26:40

+0

**小心,ISNUMERIC()並不總是像你期望的那樣「工作」。**見:https://www.simple-talk.com/blogs/2011/01/13/isnumeric-broken-只向上到一個點/ – 2013-04-24 18:53:12

回答

2

如果你想知道,如果基本數據類型是數字,你可以使用SQL_Variant_Property來找出;

DECLARE @x sql_variant 
SET @x = 3.2 

SELECT CASE 
     WHEN SQL_Variant_Property(@x, 'Precision') = 0 
     THEN 'NO' 
     ELSE 'YES' 
     END 
3

鑄造到int沒有什麼意義。你的轉換將失敗(當除了整數之外的其他東西出現),你會得到一個錯誤。

可以,但是,轉換爲nvarchar(max) - 這總是工作和你ISNUMERIC功能將像預期的那樣

相關問題