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

我有一个使用SQL Server 2000中不存在的function的脚本。具体来说,该脚本将创build一个使用SQL Server 2005中添加的数据types的存储过程。

我需要使用条件逻辑来确保(1)服务器版本是2005或更高版本,(2)目标数据库的兼容级别是2005或更高版本。 而且,这个脚本需要在SQL Server 2000上运行没有错误,显然不需要添加新的存储过程。

我正在成功parsingSERVERPROPERTY('productversion')来确定服务器版本。 但是,我可以find有关访问兼容级别的所有信息,请参阅SELECT COMPATIBILITY_LEVEL FROM sys.databases WHERE [name] = ('DBName') for SQL Server 2005+,并从SQL Server 2000上的sysdatabasesselect。不幸的是,这些方法都无法工作所有需要运行的四个SQL Server版本(2000,2005,2008,2008 R2)。

想法?

这适用于2000年及以上:

 select name,cmptlevel from master.dbo.sysdatabases 

我不知道是否有什么比你的下面的解决scheme更好。

执行以下操作并将结果捕获到表中

  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 

尽pipe我做了类似的不同的问题。

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