我有一个使用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/