Поделиться через


Критические изменения функций ядра СУБД в SQL Server 2014

В этом разделе описываются критические изменения в ядре СУБД SQL Server 2014 и более ранних версиях SQL Server. Эти изменения могут нарушить работу приложений, скриптов или функций, основанных на более ранних версиях SQL Server. При обновлении могут возникнуть эти проблемы. Дополнительные сведения см. в разделе "Помощник по обновлению" для подготовки к обновлению.

Критические изменения в SQL Server 2014

Новые проблемы не возникают.

Критические изменения в SQL Server 2012

Transact-SQL

Функция Описание
Выбор из столбцов или таблиц с именем NEXT Последовательности используют стандартНУЮ функцию ANSI NEXT VALUE FOR. Если таблица или столбец называется NEXT, а таблица или столбец псевдонимируются как ЗНАЧЕНИЕ, а если стандарт ANSI AS опущен, результирующий оператор может вызвать ошибку. Чтобы обойти проблему, включите стандартное ключевое слово ANSI AS. Например, SELECT NEXT VALUE FROM Table следует переписать как SELECT NEXT AS VALUE FROM Table и SELECT Col1 FROM NEXT VALUE быть перезаписан как SELECT Col1 FROM NEXT AS VALUE.
Оператор PIVOT Оператор PIVOT не допускается в рекурсивном запросе общего табличного выражения (CTE), если для уровня совместимости базы данных задано значение 110. Переопределите запрос или измените уровень совместимости на 100 или ниже. Использование PIVOT в рекурсивном запросе CTE порождает неправильные результаты, когда в каждой группе более одной строки.
sp_setapprole и sp_unsetapprole Параметр cookie OUTPUT для sp_setapprole в настоящее время задокументирован как varbinary(8000), что соответствует правильной максимальной длине. Однако текущая реализация возвращает varbinary(50). Приложения должны продолжать резервировать varbinary(8000), чтобы приложение продолжало функционировать корректно, если размер возвращаемого файла cookie увеличится в будущих версиях. Дополнительные сведения см. в разделе sp_setapprole (Transact-SQL).
ВЫПОЛНИТЬ КАК Выходной параметр cookie для EXECUTE AS в настоящее время задокументирован так, как varbinary(8000) это правильная максимальная длина. Однако текущая реализация возвращает varbinary(100). Приложения должны продолжать резервировать varbinary(8000), чтобы они продолжали работать правильно, если размер возвращаемого файла cookie увеличится в одном из будущих выпусков. Дополнительные сведения см. в разделе EXECUTE AS (Transact-SQL).
функция sys.fn_get_audit_file Добавлены два дополнительных столбца (user_defined_event_id и user_defined_information) для поддержки пользовательских событий аудита. Приложения, которые не выбирают столбцы по имени, могут возвращать больше столбцов, чем ожидалось. Выберите столбцы по имени или измените приложение, чтобы принять эти дополнительные столбцы.
Зарезервированное ключевое слово WITHIN WITHIN теперь зарезервированное ключевое слово. Ссылки на объекты или столбцы с именем "внутри" приведут к ошибке. Переименуйте имя объекта или столбца или разделите имя с помощью квадратных скобок или кавычки. Например: SELECT * FROM [within].
Операции CAST и CONVERT для вычисляемых столбцов типа time или datetime2 В более ранних версиях SQL Server стиль по умолчанию для операций CAST и CONVERT над типами данных time и datetime2 составляет 121, за исключением случаев, когда любой из этих типов используется в вычисляемом столбце. Для вычисляемых столбцов используемый по умолчанию стиль — 0. Это поведение влияет на вычисляемые столбцы при их создании и использовании в запросах с автоматической параметризацией, а также при использовании в определениях ограничений.

На уровне совместимости 110 стиль по умолчанию для операций CAST и CONVERT на типах данных time и datetime2 всегда равен 121. Если запрос основан на прежнем поведении, следует использовать уровень совместимости ниже 110, либо явно задать в затрагиваемом запросе стиль 0.

Обновление базы данных до уровня совместимости 110 не изменит данные пользователя, хранящиеся на диске. Следует исправить эти данных соответствующим образом вручную. Например, если вы использовали SELECT INTO для создания таблицы из источника, содержащего вычисленное выражение столбца, описанное выше, данные (с использованием стиля 0) будут храниться вместо определения вычисляемого столбца. Потребовалось бы вручную обновлять эти данные в соответствии со стилем 121.
ИЗМЕНИТЬ ТАБЛИЦУ Инструкция ALTER TABLE допускает только имена таблиц, состоящие из двух частей (schema.object). Указание имени таблицы с использованием следующих форматов теперь завершается ошибкой 117 во время компиляции.

сервер.база данных.схема.таблица

.database.schema.table

.. schema.table

В более ранних версиях указание формата server.database.schema.table вызывало ошибку 4902. Указание формата .database.schema.table или формата ..schema.table выполнено успешно. Чтобы устранить проблему, удалите 4-часть префикса.
Просмотр метаданных Запрос представления с помощью FOR BROWSE или SET NO_BROWSETABLE ON теперь возвращает метаданные представления, а не метаданные базового объекта. Это поведение теперь соответствует другим методам просмотра метаданных.
САУНДЭКС В рамках уровня совместимости базы данных 110 функция SOUNDEX реализует новые правила, которые могут привести к тому, что значения, вычисляемые функцией, отличаются от значений, вычисляемых на более ранних уровнях совместимости. После обновления до уровня совместимости 110 может потребоваться перестроить индексы, кучи или ограничения CHECK, использующие функцию SOUNDEX. Дополнительные сведения см. в разделе SOUNDEX (Transact-SQL)
Сообщение счетчика строк для неудачных инструкций DML В SQL Server 2012 ядро СУБД последовательно отправляет маркер TDS DONE с rowCount: 0 клиентам при сбое инструкции DML. В более ранних версиях SQL Server неверное значение -1 отправляется клиенту, когда инструкция DML, которая завершается сбоем, содержится в блоке TRY-CATCH и автоматически параметризуется ядром СУБД или блок TRY-CATCH находится не на том же уровне, что и неудавшаяся инструкция. Например, если блок TRY-CATCH вызывает хранимую процедуру и оператор DML в процедуре завершается ошибкой, клиент неправильно получит значение -1.

Приложения, которые зависят от этого неправильного поведения, будут работать неправильно.
SERVERPROPERTY ('Edition') Установленный выпуск экземпляра продукта SQL Server 2012. Используйте значение этого свойства для определения компонентов и ограничений, таких как максимальное количество ЦП, поддерживаемых установленным продуктом.

На основе установленного выпуска Enterprise это может возвращать Enterprise Edition или Enterprise Edition: лицензирование на основе ядра. Выпуски Enterprise различаются по максимальной вычислительной мощности, поддерживаемой одним экземпляром SQL Server. Дополнительные сведения об ограничениях вычислительных ресурсов в SQL Server 2012 см. в разделе "Ограничения вычислительной емкости по выпуску SQL Server".
Создать учётную запись Параметр CREATE LOGIN WITH PASSWORD = 'пароля' HASHED нельзя использовать с хэшами, созданными SQL Server 7 или более ранней версией.
Операции CAST и CONVERT для datetimeoffset Единственными стилями, поддерживаемыми при преобразовании из типов datetimeoffset даты и времени, являются 0 или 1. Все остальные стили преобразования возвращают ошибку 9809. Например, следующий код возвращает ошибку 9809.

SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107);

Dynamic Management Views (Динамические административные представления)

Просмотреть Описание
sys.dm_exec_requests Столбец команд изменяется с nvarchar(16) на nvarchar(32).
sys.dm_os_memory_cache_counters (счётчики кэша памяти ОС) Переименованы следующие столбцы:

single_pages_kb теперь:
pages_kb

многостраничный_кб
теперь: pages_in_use_kb
sys.dm_os_memory_cache_entries (Системная функция, используемая для получения информации о кэш-записях в памяти) Столбец pages_allocated_count был переименован на pages_kb.
sys.dm_os_memory_clerks Столбец multi_pages_kb удален.

Столбец single_pages_kb был переименован на pages_kb.
sys.dm_os_memory_nodes Переименованы следующие столбцы:

single_pages_kb теперь:
pages_kb

multi_pages_kb становится теперь:
память, выделенная для заграничных вложений (в килобайтах)
sys.dm_os_memory_objects Следующие столбцы были переименованы.

pages_allocated_count теперь такой:
страницы_в_байтах

max_pages_allocated_count теперь — max_pages_in_bytes
sys.dm_os_sys_info Переименованы следующие столбцы:

Параметр physical_memory_in_bytes теперь равен:
физическая_память_КБ

bpool_commit_target теперь установлен на:
зафиксированная_цел_кб

bpool_visible теперь:
видимая_цель_кб

virtual_memory_in_bytes теперь равно:
virtual_memory_kb

bpool_commited теперь:
committed_kb
sys.dm_os_workers Столбец локали удален.

Представления каталога

Просмотреть Описание
пространства_данных.sys

sys.partition_schemes

sys.filegroups

sys.partition_functions
В sys.data_spaces и sys.partition_functions добавлен новый столбец is_system. (sys.partition_schemes и sys.filegroups наследуют столбцы sys.data_spaces.)

Значение 1 в этом столбце указывает, что объект используется для фрагментов полнотекстового индекса.

В sys.partition_functions sys.partition_schemes и sys.filegroups новый столбец не является последним столбцом. Пересматривайте существующие запросы, основанные на порядке столбцов, возвращаемых из этих представлений каталога.

Типы данных SQL CLR (geometry, geography и hierarchyid)

Сборка Microsoft.SqlServer.Types.dll, содержащая пространственные типы данных и тип иерархии, была обновлена с версии 10.0 до версии 11.0. Пользовательские приложения, использующие эту сборку, могут выйти из строя, если выполняются следующие условия.

  • При перемещении пользовательского приложения с компьютера, на котором установлен SQL Server 2008 R2, на компьютер, где установлен только SQL Server 2014, приложение выдаст ошибку, так как ссылка на сборку SqlTypes версии 10.0 отсутствует. Это сообщение об ошибке может быть следующим: "Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified."

  • При ссылке на сборку SqlTypes версии 11.0 и версию 10.0 также можно увидеть следующее сообщение об ошибке: "System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'."

  • При ссылке на сборку SqlTypes версии 11.0 из пользовательского приложения, предназначенного для .NET 3.5, 4 или 4.5, приложение завершится сбоем, так как SqlClient по проектированию загружает версию 10.0 сборки. Эта ошибка возникает, когда приложение вызывает один из следующих методов:

    • GetValue метод SqlDataReader класса

    • GetValues метод SqlDataReader класса

    • Оператор индекса скобки SqlDataReader [] класса

    • ExecuteScalar метод SqlCommand класса

Эту проблему можно обойти с помощью одного из следующих методов:

  • Эту проблему можно обойти в коде, вызвав метод GetSqlBytes, а не методы Get, перечисленные выше, для получения системных типов CLR SQL Server, как показано в следующем примере:

    string query = "SELECT [SpatialColumn] FROM [SpatialTable]";  
          using (SqlConnection conn = new SqlConnection("..."))  
          {  
                SqlCommand cmd = new SqlCommand(query, conn);  
    
                conn.Open();  
                SqlDataReader reader = cmd.ExecuteReader();  
    
                while (reader.Read())  
                {  
                      // In version 11.0 only  
                      SqlGeometry g =   
    SqlGeometry.Deserialize(reader.GetSqlBytes(0));  
    
                      // In version 10.0 or 11.0  
                      SqlGeometry g2 = new SqlGeometry();  
                      g.Read(new BinaryReader(reader.GetSqlBytes(0).Stream));  
                }  
          }  
    
  • Эту проблему можно обойти с помощью перенаправления сборок в файле конфигурации приложения, как показано в следующем примере:

    <runtime>  
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
        ...  
        <dependentAssembly>  
            <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />  
            <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />  
        </dependentAssembly>  
        ...  
    </assemblyBinding>  
    <runtime>  
    
  • Эту проблему можно обойти в строке подключения, указав значение "SQL Server 2012" для атрибута Type System Version, чтобы принудительно загрузить SqlClient версии 11.0 сборки. Этот атрибут строки подключения доступен только в .NET 4.5 и выше.

  • Тег assemblyBinding должен быть упакован под тегом runtime .

Поддержка AWE

Поддержка 32-разрядных расширений окна адресов (AWE) прекращена. Это может привести к снижению производительности в 32-разрядных операционных системах. Для установки с большим объемом памяти перейдите в 64-разрядную операционную систему.

Функции XQuery являются Surrogate-Aware

Рекомендация W3C для функций и операторов XQuery требует, чтобы суррогатная пара, представляющая символ Юникода высокого диапазона, считалась единым глифом в кодировке UTF-16. Однако в версиях SQL Server до SQL Server 2012 строковые функции не распознали суррогатные пары как один символ. Некоторые строковые операции, такие как вычисления длины строки и извлечение подстроки, возвращают неправильные результаты. SQL Server 2012 теперь полностью поддерживает UTF-16 и правильную обработку суррогатных пар.

Тип данных XML в SQL Server разрешает только хорошо сформированные суррогатные пары. Однако некоторые функции по-прежнему могут возвращать неопределенные или непредвиденные результаты в определенных обстоятельствах, так как можно передавать недопустимые или частичные суррогатные пары в функции XQuery в виде строковых значений. Рассмотрим следующие методы для создания строковых значений при использовании XQuery в SQL Server:

  • Укажите константное строковое значение в виде двоичного значения. При использовании этого метода возможна передача недействительных или частичных суррогатных пар.

  • Укажите константное строковое значение, предоставив сущности символов. При использовании этого метода невозможно передать недопустимые суррогатные пары. Для функций XQuery требуется одна символьная сущность для высокоуровневого символа. Эти функции вызывают ошибку, если предоставляются символьные сущности для суррогатных парных символов.

  • Импорт внешних значений с помощью sql:column или sql:variable. При использовании этих методов существует возможность ввода недопустимых или частичных суррогатных пар.

Затронутые функции и операторы XQuery

Следующие функции и операторы XQuery теперь обрабатывают суррогатные пары UTF-16 в SQL Server 2012:

  • fn:string-length. Однако если в качестве аргумента передается недопустимая или частичная суррогатная пара, то поведение string-length не определено.

  • fn:substring.

  • fn:contains. Однако если часть суррогатной пары передается в качестве значения, метод contains может возвращать непредвиденные результаты, поскольку он может обнаружить частичную суррогатную пару, содержащуюся в правильно сформированной суррогатной паре.

  • fn:concat. Однако если часть суррогатной пары передается в качестве значения, сцепление может создавать неправильные суррогатные пары или частичные суррогатные пары.

  • Операторы сравнения и ORDER BY оператор. Операторы сравнения включают +, <, >, <=, >=, eq, lt, gt, le, и ge.

Вызовы распределенных запросов к системной процедуре

Ошибка вызовов распределенных запросов с помощью OPENQUERY некоторых системных процедур возникает при выполнении вызова с одного сервера SQL Server 2012 на другой. Это происходит, когда ядро СУБД не может обнаружить метаданные для процедуры. Например: SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').

Уровень изоляции и sp_reset_connection

Уровень изоляции для подключений обрабатывается следующим образом клиентскими драйверами:

  • Все встроенные драйверы (SNAC, MDAC, ODBC) устанавливают уровень изоляции (в соответствии с настройками приложения) при sp_reset_connection.

  • Для ADO.NET вы по сути получите уровень случайной изоляции в зависимости от того, какое соединение вы получаете из пула (и если приложение использует другой уровень изоляции). Поскольку пул ADO.NET может внутренне и прозрачно обрабатывать соединения, вы не можете предсказать, что вы получите из пула.

  • Для драйвера JDBC вы получаете то же поведение, что и ADO.NET

    Приложение всегда должно явно задать уровень изоляции после открытия подключения, чтобы получить то, что он хочет.

    Подключение JDBC можно объединить в пул, поэтому приложение может получить уровень случайной изоляции и не знать об этом.

Для сохранения обратной совместимости это новое поведение применяется только для последних клиентов, начиная с TDS 7.4.

Обратная совместимость

Новое поведение зависит от уровня совместимости

Следующие функции и операторы демонстрируют новое поведение, описанное выше, только если уровень совместимости равен 110 или выше:

  • fn:contains.

  • fn:concat.

  • операторы сравнения и порядок по предложению

Новое поведение зависит от URI пространства имен по умолчанию для функций

Следующие функции демонстрируют новое поведение, описанное выше, только если URI пространства имен по умолчанию соответствует пространству имен в окончательной рекомендации. http://www.w3.org/2005/xpath-functions Если уровень совместимости равен 110 или выше, то по умолчанию SQL Server 2012 привязывает пространство имен функции по умолчанию к этому пространству имен. Однако эти функции демонстрируют новое поведение, если это пространство имен используется независимо от уровня совместимости.

  • fn:string-length

  • fn:substring

Критические изменения в SQL Server 2008/SQL Server 2008R2

В этом разделе содержатся критические изменения, внесенные в SQL Server 2008. В SQL Server 2008 R2 изменения не были внесены.

Сопоставления

Функция Описание
Новые правила сортировки В SQL Server 2008 представлены новые параметры сортировки, которые полностью соответствуют параметрам сортировки, предоставляемым Windows Server 2008. Эти 80 новых параметров сортировки улучшили лингвистическую точность и обозначаются ссылками на версию *_100. Если выбрать новую сортировку для сервера или базы данных, помните, что она может не распознаваться клиентами с более старыми клиентскими драйверами. Нераспознанные сравнения могут вызвать ошибки и привести к сбою приложения. Рассмотрите следующие решения.

Обновите операционную систему клиента, чтобы обновить базовые параметры сортировки системы.

Если у клиента установлено клиентское программное обеспечение базы данных, попробуйте применить обновление службы к клиентскому программному обеспечению базы данных.

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

Общеязыковая среда выполнения (CLR)

Функция Описание
Сборки CLR При обновлении базы данных до SQL Server 2008 Microsoft.SqlServer.Types сборка для поддержки новых типов данных устанавливается автоматически. Правила Советника по обновлению обнаруживают любой тип пользователя или сборки с конфликтующими именами. Помощник по обновлению порекомендует переименовать любую конфликтующую сборку, а также либо переименовать любой конфликтующий тип, либо использовать в коде составные имена, чтобы ссылаться на уже существующий пользовательский тип.

Если обновление базы данных обнаруживает пользовательную сборку с конфликтующим именем, она автоматически переименовывает ее и помещает базу данных в подозрительный режим.

Если во время обновления обнаруживается пользовательский тип данных с конфликтующим именем, никаких специальных шагов не предпринимается. После обновления будут существовать как старый пользовательский тип, так и новый системный тип данных. Пользовательский тип данных будет доступен только с применением двухкомпонентных имен.
Сборки CLR SQL Server 2008 устанавливает .NET Framework 3.5 с пакетом обновления 1 (SP1), который обновляет библиотеки в глобальном кэше сборок (GAC). Если у вас нет неподдерживаемых библиотек, зарегистрированных в базе данных SQL Server, приложение SQL Server может перестать работать после обновления до SQL Server 2008. Это связано с тем, что обслуживание или обновление библиотек в GAC не обновляет сборки внутри SQL Server. Если сборка существует как в базе данных SQL Server, так и в GAC, две копии сборки должны точно соответствовать. Если они не совпадают, при использовании сборки с интеграцией CLR SQL Server возникнет ошибка. Дополнительные сведения см. в статье "Поддерживаемые библиотеки .NET Framework".

После обновления базы данных выполните обслуживание или обновите копию сборки в базах данных SQL Server с помощью инструкции ALTER ASSEMBLY. Дополнительные сведения см. в статье базы знаний 949080.

Чтобы определить, используется ли любая неподдерживаемая библиотека платформы .NET в приложении, выполните следующий запрос в базе данных.

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';
Функции CLR Использование олицетворения внутри определяемых пользователем функций CLR, определяемых пользователем агрегатов или определяемых пользователем типов может привести к сбою приложения с ошибкой 6522 после обновления до SQL Server 2008. Следующие сценарии успешно выполнены в SQL Server 2005, но завершаются сбоем в SQL Server 2008. Решения предоставляются для каждого сценария.

Определяемая пользователем функция CLR, определяемый пользователем агрегат или метод UDT, использующая олицетворение, имеет параметр типа nvarchar(max), varchar(max), varbinary(max), ntext, text, image, или большой определяемый пользователем тип, и не имеет атрибута DataAccessKind.Read в методе. Чтобы устранить эту проблему, добавьте атрибут DataAccessKind.Read в метод, перекомпилируйте сборку и повторно разверните подпрограмму и сборку.

Функция с табличным значением CLR, имеющая метод Init, выполняющий подмену пользователя. Чтобы устранить эту проблему, добавьте атрибут DataAccessKind.Read в метод, перекомпилируйте сборку и повторно разверните подпрограмму и сборку.

Функция CLR с табличным значением, имеющая метод FillRow, который выполняет имперсонацию. Чтобы устранить эту проблему, удалите использование имперсонации в методе FillRow. Не обращаться к внешним ресурсам с помощью метода FillRow . Вместо этого получите доступ к внешним ресурсам из метода Init .

Dynamic Management Views (Динамические административные представления)

Просмотреть Описание
sys.dm_os_sys_info Были удалены столбцы cpu_ticks_in_ms и sqlserver_start_time_cpu_ticks.
sys.dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grants Столбец resource_semaphore_id не является уникальным идентификатором в SQL Server 2008. Это изменение может повлиять на устранение неполадок при выполнении запроса. Дополнительные сведения см. в разделе sys.dm_exec_query_resource_semaphores (Transact-SQL).

Ошибки и события

Функция Описание
Ошибки входа В SQL Server 2005 ошибка 18452 возвращается при использовании имени входа SQL к серверу, настроенного для использования только проверки подлинности Windows. В SQL Server 2008 возвращается ошибка 18456.

План показа

Функция Описание
Схема Showplan XML Новый элемент SeekPredicateNew добавляется в схему Showplan XML, а заключенная последовательность xsd (SqlPredicatesType) преобразуется в <элемент xsd:choice> . Вместо одного или нескольких элементов SeekPredicate теперь в XML Showplan может появиться один или несколько элементов SeekPredicateNew . Два элемента являются взаимоисключающими. SeekPredicate поддерживается в схеме Showplan XML для обратной совместимости; Однако планы запросов, созданные в SQL Server 2008, могут содержать элемент SeekPredicateNew . Приложения, которые ожидают получить только дочерний элемент SeekPredicate из узла ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates, могут завершиться ошибкой, если элемент SeekPredicate не существует. Перепишите приложение так, чтобы в этом узле ожидался элемент SeekPredicate или SeekPredicateNew. Дополнительные сведения см. в разделе .
Схема Showplan XML Новый атрибут IndexKind добавляется в сложный тип ObjectType в схеме Showplan XML. Приложения, которые строго проверяют планы SQL Server на соответствие схеме SQL Server 2005, будут завершаться ошибкой.

Transact-SQL

Функция Описание
событие DDL ALTER_AUTHORIZATION_DATABASE В SQL Server 2005, когда событие DDL ALTER_AUTHORIZATION_DATABASE запускается, значение "object" возвращается в элементе ObjectType xml EVENTDATA для этого события, если тип сущности защищаемого объекта в операции языка определения данных (DDL) является объектом. В SQL Server 2008 возвращается фактический тип (например, table или function).
Конвертировать Если недопустимый стиль передан функции CONVERT, возникает ошибка, когда тип преобразования двоичный в символ или символ в двоичный. В более ранних версиях SQL Server недопустимый стиль задается в стиле по умолчанию для двоичных преобразований в символы и символьно-двоичные преобразования.
GRANT/DENY/REVOKE EXECUTE в сборках Разрешение EXECUTE не может быть предоставлено, запрещено или отозвано сборкам. Это разрешение не влияет и теперь вызывает ошибку. Предоставьте, запретите или отмените разрешение EXECUTE для хранимых процедур или функций, которые вместо этого ссылаются на метод сборки.
Разрешения GRANT/DENY/REVOKE для системных типов Разрешения не могут быть предоставлены, отклонены или отозваны для системных типов. В более ранних версиях SQL Server эти инструкции выполняются успешно, но не оказывают воздействия. В SQL Server 2008 возвращается ошибка.
ГРУППИРОВКА ПО Предложение GROUP BY не может содержать вложенный запрос в выражении, используемом для группы по списку. В более ранних версиях SQL Server это разрешено. В SQL Server 2008 возвращается ошибка 144.

Например, следующий код завершится успешно в SQL Server 2005 и завершится ошибкой в SQL Server 2008.

DECLARE @Test TABLE(a int NOT NULL);
INSERT INTO @Test SELECT 1 union ALL SELECT 2;
SELECT COUNT(*)
FROM @Test
GROUP BY CASE WHEN a IN (SELECT t.a FROM @Test AS t)
THEN 1 ELSE 0
END;
Предложение OUTPUT Чтобы предотвратить недетерминированное поведение, предложение OUTPUT не может ссылаться на столбец из представления или встроенной табличной функции, если этот столбец определен одним из следующих методов:

Вложенный запрос.

Определяемая пользователем функция, которая выполняет доступ к пользовательским или системным данным, или предполагается, что она выполняет такой доступ.

Вычисляемый столбец, содержащий в определении определяемую пользователем функцию, которая выполняет доступ к данным пользователя или системы.



При обнаружении такого столбца в предложении OUTPUT возникает ошибка 4186. Дополнительные сведения см. в MSSQLSERVER_4186.
Предложение OUTPUT INTO Целевая таблица предложения OUTPUT INTO не может иметь включенных триггеров.
Параметр уровня сервера для предварительного вычисления рейтинга Этот параметр не поддерживается в SQL Server 2008. Измените приложения, которые в настоящее время используют эту функцию как можно скорее.
Подсказка READPAST для таблицы Невозможно указать подсказку READPAST при изоляции снимков.

Указание READPAST игнорируется, если параметр READ_COMMITED_SNAPSHOT или ALLOW_SNAPSHOT_ISOLATION базы данных имеет значение ON. Однако при сочетании указания READPAST с READCOMMITTEDLOCK поведение READPAST совпадает с блокировкой указания READCOMMITTED.
sp_helpuser Следующие имена столбцов, возвращаемые в результирующем наборе хранимой процедуры sp_helpuser, изменились:

Имя группы теперь:
НазваниеРоли

Теперь группа называется Group_name:
Role_name

Group_id теперь установлен:
Идентификатор_роли

Users_in_group теперь установлен как:
Пользователи_в_роли
Прозрачное шифрование данных Прозрачное шифрование данных (TDE) выполняется на уровне ввода-вывода: структура страницы незашифровывается в памяти и шифруется только при записи страницы на диск. Файлы базы данных и файлы журналов шифруются. Сторонние приложения, которые обходят обычный механизм SQL Server для доступа к страницам данных (например, путем сканирования данных или файлов журнала напрямую), завершатся ошибкой, если база данных использует TDE, так как данные шифруются в этих файлах. Такие приложения могут использовать API шифрования окон для разработки решения для расшифровки данных за пределами SQL Server.

XQuery

Функция Описание
Поддержка даты и времени В SQL Server 2005 типы xs:timeданных и xs:datexs:dateTime не поддерживают часовой пояс. Данные часового пояса сопоставляются с часовой поясом UTC. SQL Server 2008 обеспечивает стандартное поведение соответствия, что приводит к следующим изменениям:

Значения без часового пояса проверяются.

Указанный часовой пояс или отсутствие часового пояса сохраняется.

Изменено представление внутреннего хранилища.

Увеличивается разрешение сохраненных значений.

Отрицательные годы не допускаются.



Примечание. Изменение выражений приложений и XQuery для учета новых значений типов.
Выражения XQuery и Xpath В SQL Server 2005 разрешены шаги в выражении XQuery или XPath, начинающихся с двоеточия (":". Например, следующая инструкция содержит тест имени (CTR02) в выражении пути, начинающемся с двоеточия.

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

В SQL Server 2008 это использование запрещено, так как оно не соответствует стандартам XML. Возвращается ошибка 9341. Удалите ведущее двоеточие или укажите префикс для названия теста, например (n$/CTR02) или (n$/p1:CTR02).

Подключение

Функция Описание
Подключение из собственного клиента SQL Server с помощью SSL При подключении с помощью клиента SQL Server Native Client, приложения, использующие "SERVER=shortname; FORCE ENCRYPTION=true" с сертификатом, субъекты которого указывают полные доменные имена (FQDN), в прошлом подключались из-за упрощенной проверки. SQL Server 2008 R2 повышает безопасность, применяя субъекты FQDN для сертификатов. Приложения, использующие расслабленную проверку, должны выполнять одно из следующих действий:

Используйте полное доменное имя в строке подключения.

—Этот параметр не требует повторной компиляции приложения, если ключевое слово SERVER строки подключения настроено за пределами приложения.

—Этот параметр не работает для приложений, имеющих жестко закодированные строки подключения.

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

—Этот параметр работает даже для приложений, имеющих жестко закодированные строки подключения.

-Этот параметр не работает для приложений, использующих дублирование базы данных, так как провайдеры не проверяют псевдонимы для полученных имен резервных партнеров.
Оформите сертификат для shortname.

-Этот параметр работает для всех приложений.

Критические изменения в SQL Server 2005

Мы накапливаем и сохраняем документацию для очень старых версий Microsoft SQL Server в наборе архивных веб-страниц. Архивные веб-страницы не обрабатываются поисковыми системами, такими как Bing.com и Google.com. Но вы можете увидеть эти архивы по адресу previous-versions/ на нашем сайте документации.

Эти архивы включают документацию по крайней мере для следующих старых версий:

  • SQL Server 2014
  • SQL Server 2012
  • SQL Server 2008 R2
  • SQL Server 2008
  • SQL Server 2005

Документация по SQL Server 2014 была архивирована и больше не обрабатывается поисковыми системами. Статьи 2014 года теперь помечены директивами NOINDEX и NOFOLLOW.

Последняя версия SQL Server вместе с другими последними версиями описана здесь.

См. также

Нерекомендуемые функции ядра СУБД в SQL Server 2014
Изменения поведения компонентов ядра СУБД в SQL Server 2014
Неподдерживаемые функции ядра СУБД в SQL Server 2014
Обратная совместимость ядра СУБД SQL Server
Уровень совместимости инструкции ALTER DATABASE (Transact-SQL)
Критические изменения функций средств управления в SQL Server 2014