Найти в Дзене
SQL от sql-ex.ru

Уровень совместимости базы данных

Для пользователя уровень совместимости базы данных в основном ассоциируется с доступными возможностями языка SQL. Каждая версия SQL Server, помимо текущего уровня совместимости, поддерживала уровни совместимости ряда предыдущих версий. Это позволяет при переходе на новую версию понизить уровень совместимости, если что-то пойдет не так. При создании новой базы данных, уровень совместимости этой базы данных будет установлен в уровень совместимости, принятый по умолчанию для данной версии SQL Server. Так, например, новая база данных, создаваемая в SQL Server 2017 получит уровень совместимости 140. Если точнее, наследоваться будет уровень совместимости системной базы данных model (который можно изменить). Если вы восстанавливаете базу данных из бэкапа, который был сделан на более старой версии SQL Server, то уровень совместимости базы данных останется таким, каким он был на старой версии. Изменить уровень совместимости базы данных можно в Management Studio с помощью команды Свойства для

Для пользователя уровень совместимости базы данных в основном ассоциируется с доступными возможностями языка SQL. Каждая версия SQL Server, помимо текущего уровня совместимости, поддерживала уровни совместимости ряда предыдущих версий. Это позволяет при переходе на новую версию понизить уровень совместимости, если что-то пойдет не так.

При создании новой базы данных, уровень совместимости этой базы данных будет установлен в уровень совместимости, принятый по умолчанию для данной версии SQL Server. Так, например, новая база данных, создаваемая в SQL Server 2017 получит уровень совместимости 140. Если точнее, наследоваться будет уровень совместимости системной базы данных model (который можно изменить).

Если вы восстанавливаете базу данных из бэкапа, который был сделан на более старой версии SQL Server, то уровень совместимости базы данных останется таким, каким он был на старой версии.

Изменить уровень совместимости базы данных можно в Management Studio с помощью команды Свойства для выбранной базы данных.

На рисунке показано окно свойств для базы данных в SQL Server 2014 и соответствующей этой версии Management Studio. Как видно, уровень совместимости для SQL Server 2014 равен 120. Ниже приведены уровни совместимости для последующих версий SQL Server:

  • SQL Server 2016 - 130
  • SQL Server 2017 - 140
  • SQL Server 2019 - 150

Вы можете соединиться с новыми версими SQL Server в Management Studio более старой версии. В данный момент я использую SSMS 2014. Если соединиться в ней с SQL Server 2017, то в свойствах базы данных вы получите пустой список уровней совместимости. Не будет показан даже текущий уровень совместимости базы данных:

-2

Оно и понятно ввиду отсутствия прямой совместимости. В подобной ситуации вы можете воспользоваться T-SQL (пример ниже).

Чтобы узнать текущие уровни совместимости всех баз данных на сервере, можно написать запрос:

SELECT name, compatibility_level FROM sys.databases;

Для конкретной базы данных добавьте предложение WHERE:

SELECT name, compatibility_level FROM sys.databases where name='AdventureWorks2016CTP3';

name compatibility_level

AdventureWorks2016CTP3 130

Изменить уровень совместимости базы можно с помощью следующего оператора T-SQL:

ALTER DATABASE AdventureWorks2016CTP3
SET COMPATIBILITY_LEVEL = 140;

Здесь мы подняли уровень совместимости базы данных AdventureWorks2016CTP3 до уровня текущей СУБД.

Давайте проверим влияние уровня совместимости на выполнение запроса, содержащего в более новой версии то, что отсутствовало в предыдущих.

Так, например, функция STRING_SPLIT требует уровня совместимости не ниже 130. Нижеприведенный запрос разбивает строку '0 1 2 3' на подстроки с пробелом в качестве разделителя.

use AdventureWorks2016CTP3;
SELECT * FROM STRING_SPLIT('0 1 2 3',' ');

value

0

1

2

3

Однако если изменить уровень совместимости на 120:

ALTER DATABASE AdventureWorks2016CTP3
SET COMPATIBILITY_LEVEL = 120;
go
SELECT * FROM STRING_SPLIT('0 1 2 3',' ');

то мы получим ошибку:

Недопустимое имя объекта "STRING_SPLIT".

Подробнее о значении уровня совместимости.