转换为数据类型为NULL的int

时间:2019-07-02 18:41:04

标签: sql sql-server

从SQL Server 2012升级到SQL Server 2017后,提供季度报告的存储过程无法提供信息。已确定问题所在,因为该过程无法生成驱动该过程其余部分的变量。

标识由于使用数据样式NULL的CONVERT语句未设置变量。如果下面的查询在SQL Server 2017上运行,则变量@CountFrequency将返回NULL,这是基于Microsoft文档有关CONVERT和数据样式NULL的预期结果。如果该查询在SQL Server 2012或2016上运行,则@CountFrequency返回4,这使存储过程可以在升级之前在我们的生产环境中成功运行。

DECLARE @OwnerCountUDF varchar(30) = '4'
    , @CountFrequency int
;

IF ISNUMERIC(@OwnerCountUDF) = 1
    SELECT @CountFrequency = CONVERT(int,@OwnerCountUDF,NULL)
ELSE 
    SELECT @CountFrequency = 1
;

SELECT ISNUMERIC(@OwnerCountUDF) 'Numeric'
    , @OwnerCountUDF '@OwnerCountUDF'
    , @CountFrequency '@CountFrequency'
;

未能找到有关CONVERT更改的任何文档,这可能会导致结果差异。

1 个答案:

答案 0 :(得分:0)

根据documentation,它是带有注释的 SQL Server(从2008开始)

  

样式

     

一个整数表达式,指定CONVERT函数将如何转换表达式。对于样式值NULL,返回NULL。 data_type确定范围。

也许您的兼容性级别已在​​SQL Server 2012版本中设置为甚至更早的版本。