使用带有sql_variant SQL Server的ISNUMERIC()

时间:2013-04-24 18:10:16

标签: sql tsql sql-server-2008-r2

如何将ISNUMERIC()函数与sql_variant数据类型一起使用?

以下代码不起作用

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

错误:

  

Msg 8116,Level 16,State 1,Line 4
  参数数据类型sql_variant对于isnumeric函数的参数1无效。

但这有效

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

是否可以通过CAST()

实现这一目标

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

2 个答案:

答案 0 :(得分:3)

投射到int并没有多大意义。您的转换将失败(当出现除整数之外的其他内容时),您将收到错误。

但是,您可以转发nvarchar(max) - 此应该始终有效,而您的ISNUMERIC功能将按预期运行

答案 1 :(得分: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