我的软件与 SQL2016 及更高版本(包括 SQL Azure)兼容,当 SQL 2022 低于版本 16.0.1135.2 或低于 16.0.4165.4 时会崩溃 - 取决于 RTM、GDR、CU(我很难理解 MS 使用的版本架构)
我编写此代码是为了查明是否需要 SQL 更新
-- if it's Version 16
IF (select substring(convert(varchar(20),SERVERPROPERTY('productversion')),1,charindex('.',convert(varchar(20),SERVERPROPERTY('productversion')))-1))='16'
-- If so is it 16.0.1xxxxxxx or 16.0.4xxxxxxxx
IF (select substring(convert(varchar(20),SERVERPROPERTY('productversion')),1,charindex('16.0.',convert(varchar(20),SERVERPROPERTY('productversion')))))='1'
-- if 16.0.1 it needs to be < 16.0.1135.2
BEGIN
if (select substring(convert(varchar(20),SERVERPROPERTY('productversion')),charindex('16.0.',convert(varchar(20),SERVERPROPERTY('productversion'))),len(convert(varchar(20),SERVERPROPERTY('productversion')))))<'16.0.1135.2'
select 1
END
ELSE
BEGIN
-- if 16.0.4 it needs to be < 16.0.4165.4
IF (select substring(convert(varchar(20),SERVERPROPERTY('productversion')),1,charindex('16.0.',convert(varchar(20),SERVERPROPERTY('productversion')))))='4'
if (select substring(convert(varchar(20),SERVERPROPERTY('productversion')),charindex('16.0.',convert(varchar(20),SERVERPROPERTY('productversion'))),len(convert(varchar(20),SERVERPROPERTY('productversion')))))<'16.0.4165.4'
select 1
END
我的问题是,在 16.0.YYYY.z 中,我认为我不能依赖第一个 Y 来告诉我应该查看哪个分支,因为查看以前的 SQL 版本,在同一个分支中,第一个 Y 可以更改数字...我要查找的是 2024-11-12 之前更新的 2 个版本,如果安装的 SQL2022 版本不包含 2024-11-12 的更新,我希望被标记
- 是否存在我可以遵循的标准或者是否有更好的方法来做到这一点?
- 我是否应该担心 Azure 或者我可以假设 Azure 始终是最新的?
我们想让用户知道他们至少需要 16.0.1135.2 或 16.0.4165.4。我担心的是在查询中选择分支(='1' 或 ='4')。我不认为它会随着时间的推移而变得可靠(数字可能会改变),因为我不确定 MS 使用的惯例。
该软件拥有超过 30,000 个脚本(开发时间超过 30 年)和数千个客户。升级由专家完成(而不是由客户完成)。由于它每年更新四次,因此如果我们发现 SQL 服务器不兼容,我们希望在升级过程中添加警告,以便专家可以采取行动。