sp_dbcmptlevel (Transact-SQL)
Определяет поведение конкретных баз данных для совместимости с указанной версией SQL Server.
Важно! |
---|
В будущей версии Microsoft SQL Server эта возможность будет удалена. Не используйте ее при работе над новыми приложениями и как можно быстрее измените приложения, в которых она в настоящее время используется. Используйте вместо этого Уровень совместимости инструкции ALTER DATABASE. |
Синтаксис
sp_dbcmptlevel [ [ @dbname = ] name ]
[ , [ @new_cmptlevel = ] version ]
Аргументы
[ @dbname= ] name
Имя базы данных, для которой должен быть изменен уровень совместимости. Имена баз данных должны соответствовать правилам для идентификаторов. Аргумент name имеет тип sysname и значение по умолчанию NULL.[ @new_cmptlevel= ] version
Версия SQL Server, с которой должна быть совместима база данных. Аргумент version имеет тип tinyint и значение по умолчанию NULL. Значение должно быть одним из следующих:80 = SQL Server 2000
90 = SQL Server 2005
100 = SQL Server 2008
Значения кодов возврата
0 (успешное завершение) или 1 (неуспешное завершение)
Результирующие наборы
Если аргументы не указаны, или если не указано значение аргумента name, процедура sp_dbcmptlevel возвращает ошибку.
Если аргумент name указан без аргумента version, то компонент Database Engine возвращает сообщение, отображающее текущий уровень совместимости для указанной базы данных.
Замечания
Описание уровней совместимости см. в разделе Уровень совместимости инструкции ALTER DATABASE (Transact-SQL).
Разрешения
Только владелец базы данных, члены предопределенной роли сервера sysadmin и предопределенной роли базы данных db_owner (при изменении текущей базы данных) могут выполнять эту процедуру.
Примеры
А. Изменение уровня совместимости до SQL Server 2000
В следующем примере изменяется уровень совместимости базы данных AdventureWorks до 80.
EXEC sp_dbcmptlevel AdventureWorks, 80;
GO
Б. Влияние уровня совместимости на ORDER BY (сценарий 1)
В следующем примере проиллюстрированы различия в привязке ORDER BY для уровней совместимости 80 и 90. В этом примере создается образец таблицы (SampleTable) в базе данных tempdb.
USE tempdb;
CREATE TABLE SampleTable(c1 int, c2 int);
GO
На уровне совместимости 90 (по умолчанию) следующая инструкция SELECT... ORDER BY выдает ошибку, поскольку имя столбца в предложении AS (c1) является неоднозначным.
SELECT c1, c2 AS c1
FROM SampleTable
ORDER BY c1;
GO
После изменения уровня совместимости базы данных на 80 та же самая инструкция SELECT... ORDER BY выполняется успешно.
sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c1
FROM SampleTable
ORDER BY c1;
GO
Следующая инструкция SELECT... ORDER BY работает при обоих уровнях совместимости.
sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO
sp_dbcmptlevel tempdb, 90
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO
В. Влияние уровня совместимости на ORDER BY (сценарий 2)
При применяемом по умолчанию уровне совместимости 90 следующая инструкция SELECT...ORDER BY приводит к ошибке, потому что имеется дополнительный префикс у таблицы в предложении ORDER BY.
SELECT c1 AS x
FROM SampleTable
ORDER BY SampleTable.x;
GO
После того как база данных будет переведена на уровень совместимости 80, та же самая инструкция SELECT...ORDER BY выполнится успешно.
sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
FROM SampleTable
ORDER BY SampleTable.x;
GO
Следующая инструкция SELECT...ORDER BY работает при обоих значениях уровня совместимости.
sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
FROM SampleTable
ORDER BY x;
GO
sp_dbcmptlevel tempdb, 90
SELECT c1 AS x
FROM SampleTable
ORDER BY x;
GO