Назад | Перейти на главную страницу

Обратная совместимость (с SQL 2000) версия сервера и проверка версии совместимости

У меня есть сценарий, который использует функции, отсутствующие в 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).

Идеи?

Это работает для 2000 и выше:

select name,cmptlevel from master.dbo.sysdatabases

Я не знаю, есть ли для вас что-нибудь лучше, чем приведенное ниже решение.

Выполните следующие действия и запишите результаты в таблицу.

    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/