2

如何使用数据类型ISNUMERIC()的函数sql_variant

以下代码不起作用

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

错误 :

消息 8116,级别 16,状态 1,第 4 行
参数数据类型 sql_variant 对于非数字函数的参数 1 无效。

但这有效

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

有没有办法让这件事发生CAST()

在谷歌上没有找到任何有用的关于这个问题的东西谢谢,我正在使用 SQL Server 2008 R2

4

2 回答 2

3

投射到int并没有真正的意义。您的转换将失败(当出现除整数以外的其他内容时)并且您将收到错误消息。

但是,您可以强制转换为nvarchar(max)- 这应该始终有效,并且您的ISNUMERIC函数将按预期运行

于 2013-04-24T18:14:51.207 回答
3

如果您想知道底层数据类型是否为数字,您可以使用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
于 2013-04-24T18:49:17.893 回答