从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更改的任何文档,这可能会导致结果差异。
答案 0 :(得分:0)
根据documentation,它是带有注释的 SQL Server(从2008开始):
样式
一个整数表达式,指定CONVERT函数将如何转换表达式。对于样式值NULL,返回NULL。 data_type确定范围。
也许您的兼容性级别已在SQL Server 2012版本中设置为甚至更早的版本。