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

В этом разделе описаны критические изменения в SQL Server 2012 Компонент Database Engine и предыдущих версиях SQL Server. Эти изменения могут нарушать работу приложений, скриптов или механизмов, основанных на более ранних версиях SQL Server. При обновлении могут возникнуть следующие проблемы. Дополнительные сведения см. в разделе Использование помощника по обновлению для подготовки к обновлениям.

В этом разделе

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

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

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

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

Transact-SQL

Компонент

Описание

Выбор в столбцах и таблицах с именем NEXT.

Последовательности используют стандартную функцию ANSI NEXT VALUE FOR. Если таблица или столбец имеют имя NEXT, псевдоним VALUE, а также если пропущено ключевое слово AS по стандарту ANSI, то результирующая инструкция может вызвать ошибку. Чтобы избежать этой проблемы, используйте ключевое слово AS по стандарту ANSI. Например, запрос 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

Параметр OUTPUT куки-файла для sp_setapprole в настоящее время описан в документации как varbinary(8000), что верно определяет его максимальную длину. Однако текущая реализация возвращает varbinary(50). Дальнейшее резервирование varbinary(8000) в приложениях необходимо для обеспечения правильного продолжения работы в случае увеличения размера куки-файлов в последующих выпусках. Дополнительные сведения см. в разделе sp_setapprole (Transact-SQL).

EXECUTE AS

Параметр OUTPUT куки-файла для инструкции EXECUTE AS в настоящее время описан в документации как varbinary(8000), что задает верную максимальную длину. Однако текущая реализация возвращает varbinary(100). Дальнейшее резервирование varbinary(8000) в приложениях необходимо для обеспечения правильного продолжения работы в случае увеличения размера куки-файлов в последующих выпусках. Дополнительные сведения см. в разделе EXECUTE AS (Transact-SQL).

sys.fn_get_audit_file, функция

Добавлены дополнительные столбцы (user_defined_event_id и user_defined_information) для поддержки определяемых пользователем событий аудита. Приложения, не выбирающие столбцы по имени, могут возвращать больше столбцов, чем ожидается. Либо выбирайте столбцы по имени, либо доработайте приложение, чтобы оно принимало эти дополнительные столбцы.

Операции 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

В инструкции ALTER TABLE разрешается использовать только имена таблиц, составленные из двух частей (схема.объект). Если вы зададите имя таблицы в приведенных ниже форматах, теперь во время компиляции это вызовет ошибку 117.

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

  • «.база_данных.схема.таблица»

  • «..схема.таблица»

В предыдущих версиях при задании формата «сервер.база_данных.схема.таблица» возникала ошибка 4902. Формат «.база_данных.схема.таблица» или «..схема.таблица» обрабатывался успешно.

Чтобы устранить эту проблему, используйте четырехкомпонентный префикс.

Просмотр метаданных

Запросы к представлению с помощью предложения FOR BROWSE или SET NO_BROWSETABLE ON теперь возвращают метаданные представления, а не метаданные базового объекта. Это поведение теперь такое же, как и у других методов просмотра метаданных.

SOUNDEX

При уровне совместимости базы данных 110 функция SOUNDEX реализует новые правила, при применении которых значения, вычисляемые функцией, могут отличаться от тех значений, которые были вычислены при другом уровне совместимости. После обновления до уровня совместимости 110 может потребоваться перестроение индексов, куч или проверочных ограничений, которые используют функцию SOUNDEX. Дополнительные сведения см. в разделе SOUNDEX (Transact-SQL).

Сообщение о количестве строк для инструкций DML, завершившихся ошибкой

В SQL Server 2012 компонент Компонент Database Engine будет согласованно отправлять клиентам токен TDS DONE с RowCount: 0 при возникновении сбоя инструкции DML. В предыдущих версиях SQL Server неверное значение -1 отправляется клиенту, когда не завершенная успешно инструкция DML содержится в блоке TRY-CATCH и либо автопараметризуется Компонент Database Engine, либо блок TRY-CATCH находится на разных уровнях с не завершенной успешно инструкцией. Например, если блок TRY-CATCH вызывает хранимую процедуру и инструкция DML в процедуре завершается ошибкой, клиент получит ошибочное значение -1.

Приложения, работа которых зависит от этого неверного поведения, будут завершены с ошибками.

SERVERPROPERTY («Edition»)

Установленный выпуск экземпляра SQL Server 2012. Используйте значения этого свойства для определения возможностей и ограничений, таких как максимальное количество процессоров, которые поддерживаются установленным продуктом.

В зависимости от установленного выпуска Enterprise Edition возвращается строка «Enterprise Edition» или «Enterprise Edition: лицензирование по числу ядер». Выпуски Enterprise Edition различаются по максимальной вычислительной мощности на один экземпляр SQL Server. Дополнительные сведения об ограничениях вычислительной мощности в SQL Server 2012 см. в разделе Вычисление производительности выпуска SQL Server.

CREATE LOGIN

Параметр CREATE LOGIN WITH PASSWORD = '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);

SET ROWCOUNT

Поведение SET ROWCOUNT было изменено для повышения эффективности большинства обычных запросов и может оказать влияние на планы выполнения запросов для уровней совместимости 110 и выше. Может возникнуть ошибка в том случае, если инструкция SET ROWCOUNT изменит значение ROWCOUNT в 0 или из 0 после инструкции DECLARE CURSOR и перед инструкцией FETCH. Чтобы избежать данной ошибки, установите уровень совместимости базы данных в 100 или установите значение ROWCOUNT за пределами области действия курсорных инструкций.

Динамические административные представления

Представление

Описание

sys.dm_exec_requests

Тип столбца команды меняется с nvarchar(16) на nvarchar(32).

sys.dm_os_memory_cache_counters

Следующие столбцы были переименованы.

Предыдущее имя столбца

Новое имя столбца

single_pages_kb

pages_kb

multi_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

foreign_committed_kb

sys.dm_os_memory_objects

Следующие столбцы были переименованы.

Предыдущее имя столбца

Новое имя столбца

pages_allocated_count

pages_in_bytes

max_pages_allocated_count

max_pages_in_bytes

sys.dm_os_sys_info

Следующие столбцы были переименованы.

Предыдущее имя столбца

Новое имя столбца

physical_memory_in_bytes

physical_memory_kb

bpool_commit_target

committed_target_kb

bpool_visible

visible_target_kb

virtual_memory_in_bytes

virtual_memory_kb

bpool_commited

committed_kb

sys.dm_os_workers

Столбец локали был удален.

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

Представление

Описание

sys.data_spaces

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 новый столбец не является последним. Проверьте существующие запросы, в которых большое значение имеет порядок столбцов, возвращаемых из этих представлений каталогов.

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

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

  • При перемещении пользовательского приложения с компьютера, на котором был установлен экземпляр SQL Server 2008 R2, на компьютер, где установлен только SQL Server 2012, приложение завершится с ошибкой, поскольку указанная в ссылке версия 10.0 сборки SqlTypes отсутствует. Может быть выдано следующее сообщение об ошибке: “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 учитываются суррогаты

Рекомендация 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. Однако, если в качестве значения передана неполная суррогатная пара, функция concat может выдавать неправильные или неполные суррогатные пары.

  • Операторы сравнения и предложение order by. К операторам сравнения относятся +, <, >, <=, >=, eq, lt, gt, le и ge.

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

Вызовы распределенных запросов через OPENQUERY к некоторым системным процедурам завершаются ошибкой, если они выполняются от одного сервера к другому. Это происходит тогда, когда компоненту Компонент Database Engine не удается обнаружить метаданные для процедуры. Например, SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').

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

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

Следующие функции и операторы ведут себя описанным выше образом (по-новому) только при уровне совместимости 110 и выше.

  • fn:contains.

  • fn:concat.

  • Операторы сравнения и предложение order by.

Применение нового поведения зависит от 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), которая обновляет библиотеки в глобальном кэше сборок. При наличии неподдерживаемых библиотек, зарегистрированных в базе данных SQL Server, приложение SQL Server может прекратить работу после обновления до версии SQL Server 2008. Это происходит вследствие того, что обслуживание или обновление библиотек в глобальном кэше сборок не обновляет сборки внутри SQL Server. Если сборка существует и в базе данных SQL Server, и в глобальном кэше сборок, то обе копии сборки должны полностью совпадать. Если они не совпадают, то при использовании сборки с интеграцией со средой SQL Server CLR возникает ошибка. Дополнительные сведения см. в разделе Поддерживаемые библиотеки платформы .NET Framework.

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

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

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';

Подпрограммы CLR

Использование олицетворения в определяемых пользователем функциях CLR, определяемых пользователем статистических функциях CLR или определяемых пользователем типах CLR после обновления до SQL Server 2008 может вызвать завершение приложений с ошибкой 6522.

Следующие сценарии выполняются успешно в SQL Server 2005, но завершаются ошибкой в SQL Server 2008. Для каждого сценария указаны способы разрешения.

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

    Чтобы устранить эту проблему, добавьте в метод атрибут DataAccessKind.Read, повторно скомпилируйте сборку и выполните повторное развертывание подпрограммы и сборки.

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

    Чтобы устранить эту проблему, добавьте в метод атрибут DataAccessKind.Read, повторно скомпилируйте сборку и выполните повторное развертывание подпрограммы и сборки.

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

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

Динамические административные представления

Представление

Описание

sys.dm_os_sys_info

Удалены столбцы cpu_ticks_in_ms и sqlserver_start_time_cpu_ticks.

sys.dm_exec_query_resource_semaphores sys.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-схема инструкции Showplan

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

XML-схема инструкции Showplan

Новый атрибут IndexKind добавляется в сложный тип ObjectType схемы XML Showplan. Работа приложений, выполняющих строгую проверку планов SQL Server по отношению к схеме SQL Server 2005, будет завершаться с ошибкой.

Transact-SQL

Компонент

Описание

DDL-событие ALTER_AUTHORIZATION_DATABASE

Если тип сущности защищаемого объекта в операции языка описания данных DDL является объектом, то в SQL Server 2005 при срабатывании DDL-события ALTER_AUTHORIZATION_DATABASE значение 'object' возвращается в элемент ObjectType EVENTDATA XML для данного события. В SQL Server 2008 возвращается действительный тип (например, 'table' или 'function').

CONVERT

Если в функцию CONVERT передан недопустимый стиль, при преобразовании двоичного типа в символьный или символьного в двоичный возвращается ошибка. В предыдущих версиях SQL Server недопустимый стиль устанавливается на стиль по умолчанию для преобразований «двоичный в символьный» и «символьный в двоичный».

Разрешения GRANT/DENY/REVOKE EXECUTE для сборок

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

Разрешения GRANT/DENY/REVOKE на системные типы

Разрешения на системные типы нельзя предоставить, запретить или отменить. В предыдущих версиях SQL Server данные инструкции завершаются успешно, но не оказывают влияния. В SQL Server 2008 также возвращается ошибка.

GROUP BY

Предложение GROUP BY не может содержать вложенный запрос в выражении, используемом для списка 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 не может ссылаться на столбец из представления или встроенной возвращающей табличное значение функции, если этот столбец определен одним из следующих методов.

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

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

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

При обнаружении SQL Server такого столбца в предложении OUTPUT появляется ошибка 4186. Дополнительные сведения см. в разделе MSSQLSERVER_4186.

Предложение OUTPUT INTO

Целевая таблица предложения OUTPUT INTO не может иметь какие-либо включенные триггеры.

Параметр уровня сервера precompute rank

Этот параметр не поддерживается в SQL Server 2008. Как можно скорее измените приложения, в настоящее время использующие эту функцию.

Табличное указание READPAST

Нельзя задавать указание READPAST при изоляции моментальных снимков.

Если параметру базы данных ALLOW_SNAPSHOT_ISOLATION или READ_COMMITTED_SNAPSHOT, либо обоим этим параметрам присвоено значение ON, то указание READPAST пропускается. Однако если указание READPAST применяется совместно с READCOMMITTEDLOCK, то READPAST будет работать таким же образом, как и при использовании блокирующего указания READCOMMITTED.

sp_helpuser

Изменены следующие имена столбцов, возвращаемые в результирующем наборе хранимой процедуры sp_helpuser.

Предыдущее имя столбца

Новое имя столбца

GroupName

RoleName

Group_name

Role_name

Group_id

Role_id

Users_in_group

Users_in_role

прозрачное шифрование данных

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

XQuery

Компонент

Описание

Поддержка типа данных datetime

В SQL Server 2005 типы данных xs:time, xs:date и xs: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 те приложения, которые используют параметр "SERVER=shortname; FORCE ENCRYPTION=true" с сертификатом, где в субъекте указано полное доменное имя (FQDN), раньше подключались благодаря ослабленной проверке. SQL Server 2008 R2 расширяет защиту за счет включения в сертификаты предмета FQDN. В приложениях, где используется ослабленная проверка, необходимо предпринять следующие меры.

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

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

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

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

  • Чтобы обеспечить соответствие полного доменного имени, добавьте для короткого имени псевдоним.

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

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

  • Получите сертификат для короткого имени.

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

Значок стрелки, используемый со ссылкой «В начало»В начало

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

Список критических изменений в SQL Server 2005 см. в разделе Критические изменения в функциях компонента Database Engine в SQL Server 2005.

См. также

Справочник

Устаревшие функции компонента Database Engine в SQL Server 2012

Изменения в работе функций компонента Database Engine в SQL Server 2012

Неподдерживаемые функции ядра СУБД в SQL Server 2012

Уровень совместимости инструкции ALTER DATABASE (Transact-SQL)

Другие ресурсы

Обратная совместимость компонента SQL Server Database Engine