Isso funciona para 2000 e acima:
select name,cmptlevel from master.dbo.sysdatabases
Eu tenho um script que usa recursos não presentes no SQL Server 2000. Especificamente, o script cria um procedimento armazenado que usa um tipo de dados adicionado no SQL Server 2005.
Eu preciso usar a lógica condicional para garantir que (1) a versão do servidor seja 2005 ou posterior e (2) que o nível de compatibilidade do banco de dados de destino seja 2005 ou posterior. Além disso, esse script precisa ser executado sem erros no SQL Server 2000, obviamente sem realmente adicionar o novo procedimento armazenado.
Estou analisando com êxito SERVERPROPERTY('productversion')
para determinar a versão do servidor. No entanto, tudo o que posso encontrar sobre como acessar as referências de nível de compatibilidade SELECT COMPATIBILITY_LEVEL FROM sys.databases WHERE [name] = ('DBName')
para SQL Server 2005+ e selecionar sysdatabases
no SQL Server 2000. Infelizmente, nenhum desses métodos funciona em todas as quatro versões do SQL Server nas quais ele precisa ser executado ( 2000, 2005, 2008, 2008R2).
Idéias?
Não sei se existe algo melhor que a solução abaixo para você.
Faça o seguinte e capture os resultados em uma tabela
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
Eu fiz algo semelhante para um problema diferente.