![向后兼容(至 SQL 2000)服务器版本和兼容性版本检查](https://linux22.com/image/545479/%E5%90%91%E5%90%8E%E5%85%BC%E5%AE%B9%EF%BC%88%E8%87%B3%20SQL%202000%EF%BC%89%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%89%88%E6%9C%AC%E5%92%8C%E5%85%BC%E5%AE%B9%E6%80%A7%E7%89%88%E6%9C%AC%E6%A3%80%E6%9F%A5.png)
我有一个脚本,它使用了 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+ 的兼容级别参考以及从sysdatabases
SQL 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/