Versões de servidor compatíveis com versões anteriores (para o SQL 2000) e verificação de versão de compatibilidade

2

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?

    
por Gnosian 07.04.2011 / 00:06

2 respostas

2

Isso funciona para 2000 e acima:

select name,cmptlevel from master.dbo.sysdatabases
    
por 08.04.2011 / 23:08
0

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.

link

    
por 07.04.2011 / 23:17