向后兼容(至 SQL 2000)服务器版本和兼容性版本检查

向后兼容(至 SQL 2000)服务器版本和兼容性版本检查

我有一个脚本,它使用了 SQL Server 2000 中不存在的功能。具体来说,该脚本创建了一个存储过程,该存储过程使用了 SQL Server 2005 中添加的数据类型。

我需要使用条件逻辑来确保 (1) 服务器版本为 2005 或更高版本,以及 (2) 目标数据库的兼容级别为 2005 或更高版本。此外,此脚本需要在 SQL Server 2000 上无错误运行,显然无需实际添加新的存储过程。

我成功解析SERVERPROPERTY('productversion')以确定服务器版本。但是,我找到的所有关于访问SELECT COMPATIBILITY_LEVEL FROM sys.databases WHERE [name] = ('DBName')SQL Server 2005+ 的兼容级别参考以及从sysdatabasesSQL Server 2000 中进行选择的信息都无效。不幸的是,这两种方法都不适用于它需要运行的所有四个 SQL Server 版本(2000、2005、2008、2008R2)。

有想法吗?

答案1

这适用于 2000 及以上版本:

select name,cmptlevel from master.dbo.sysdatabases

答案2

我不知道是否有比下面的解决方案更好的解决方案。

执行以下操作并将结果记录在表格中

    CREATE TABLE #DBCC (
    ParentObject VARCHAR (255)
    , [Object] VARCHAR (255)
    , Field VARCHAR (255)
    , [Value] VARCHAR (255)
) 

INSERT INTO #DBCC
EXEC ('DBCC DBINFO WITH TABLERESULTS')

DECLARE @val INT
SELECT @val = Value FROM #DBCC WHERE field = 'dbi_version'

IF ( @val >= 611 )
BEGIN
    SELECT compatibility_level FROM sys.databases WHERE database_id = DB_ID();
    --Deploy 2005 and above stuff
END
ELSE
BEGIN
    --Don't deploy 2005 and above stuff
END

不过,我针对不同的问题做了类似的事情。

http://sankarreddy.com/2010/05/database-internal-version-create-version-and-current-version/

相关内容