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

Изменения: 17 ноября 2008 г.

В этом разделе описаны изменения, внесенные в Database Engine Microsoft SQL Server 2005, которые могут повлечь за собой сбой в работе приложений, основанных на более ранних версиях SQL Server.

Соединение клиента с сервером

Функция Описание

Сетевые протоколы Banyan VINES Sequenced Packet Protocol (SPP), Multiprotocol, AppleTalk или NWLink IPX/SPX

SQL Server 2005 не поддерживает сетевые протоколы Banyan VINES Sequenced Packet Protocol (SPP), Multiprotocol, AppleTalk и NWLink IPX/SPX. Чтобы подключиться к SQL Server 2005, клиентские приложения должны использовать поддерживаемый протокол. Если установлен псевдоним, использующий один из неподдерживаемых протоколов, то необходимо изменить псевдоним для использования одного из поддерживаемых протоколов.

Если строка соединения приложения явно использует или загружает неподдерживаемые протоколы, указывая NETWORK=DBMSRPCN — для RPC, NETWORK=DBMSADSN — для Appletalk или NETWORK=DBMSVINN — для Banyan VINES или явно указывает префиксы, например spx:server\instance — для SPX, bv:server — для Banyan VINES, adsp:server — для AppleTalk или rpc:server — для multiprotocol, то необходимо изменить приложение таким образом, чтобы оно использовало для соединения только поддерживаемые протоколы.

Дополнительные сведения см. в разделе Выбор сетевого протокола.

Компоненты MDAC

Компоненты MDAC версии ранее 2.6 не поддерживают именованные экземпляры. Для обеспечения возможности подключения приложений к именованным экземплярам обновите текущую версию компонентов MDAC.

Прокси-сервер Winsock

Прокси-сервер Winsock не может быть настроен средствами SQL Server. Дополнительные сведения о настройке прокси-сервера Winsock см. в документации прокси-сервера.

Параметры конфигурации

Функция

Описание

AUTO_UPDATE_STATISTICS

Установите значение ON параметра AUTO_UPDATE_STATISTICS до начала обновления любых баз данных. В противном случае статистика базы данных не обновится в ходе обновления SQL Server 2005. Использование статистики от более ранней версии SQL Server может привести к созданию неоптимальных планов запросов. При установке значения ON параметра AUTO_UPDATE_STATISTICS вся статистика будет обновлена при первом обращении к ней. Обновление статистики увеличивает возможность выбора наиболее оптимального плана запросов при выполнении запроса.

ms143179.note(ru-ru,SQL.90).gifПримечание.

В некоторых случаях после установки значения ON для параметра AUTO_UPDATE_STATISTICS процесс обновления статистики может повлиять на производительность выполнения запросов сервером при первом обращении к статистике.

Чтобы установить параметр SET базы данных AUTO_UPDATE_STATISTICS в значение ON, используйте инструкцию ALTER DATABASE или выполните хранимую процедуру sp_updatestats, чтобы обновить статистику базы данных.

Параметр max server memory

В SQL Server 2000 буферный пул SQL Server может превысить предел, заданный параметром max server memory, если доступна системная физическая память. В SQL Server 2005 буферный пул не может превысить предел, заданный параметром max server memory. Когда этот предел будет достигнут, запросы будут завершаться с ошибкой «Недостаточно системной памяти».

Если выдается это сообщение об ошибке и задан параметр max server memory, следует увеличить значение этого параметра или указать значение по умолчанию, равное 2 147 483 647. Дополнительные сведения см. в разделе Параметры памяти сервера.

Параметр query governor cost limit

Применение инструкции SET GOVERNOR_QUERY_COST_LIMIT или указание параметра query governor cost limit хранимой процедуры sp_configure может привести к тому, что запросы, которые выполнялись в предыдущих версиях SQL Server, не будут выполняться в SQL Server 2005. Это вызвано изменениями в моделировании стоимости запроса.

Измените настройки предельного значения стоимости регулятора запросов для соединения или экземпляр сервера до необходимого значения или установите значение 0, чтобы задать неограниченный срок выполнения запроса.

Базы данных, файлы данных и журналов

Функция Описание

Сжатые диски

SQL Server 2005 не может создавать или обновлять базы данных на сжатых дисках. При установке SQL Server 2005 выберите несжатый диск для системных баз данных, а также убедитесь, что обновляемые базы данных не находятся на сжатых дисках. Однако обратите внимание, что после обновления базы данных можно записывать на диск со сжатой файловой системой NTFS базы данных и вторичные файловые группы, доступные только для чтения.

Файлы данных

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

  • В файловой группе PRIMARY каждой пользовательской базы данных создаются и поддерживаются дополнительные системные метаданные для объектов базы данных и разрешений пользователей. Например, в более ранних версиях SQL Server разрешения, связанные с объектами, предоставляющими или получающими разрешения, хранились в одной строке в виде битовой карты. В SQL Server 2005 битовая карта расширена до нескольких строк.
  • Столбцы больших объектов (LOB), определенные как данные типа text, ntext или image, дополнительно требуют 40 байт места на диске на каждый столбец. Это единовременное увеличение занимаемого места происходит при первом обновлении каждого столбца LOB.
  • Вместо полнотекстового каталога в файле данных сохраняется полнотекстовая схема идентификаторов документов.

Чтобы убедиться в том, что ресурсы позволяют справиться с увеличением размеров при обновлении и последующих рабочих операциях, рекомендуется установить для параметра «Авторасширение» значение ON для всех файлов данных пользователей перед началом обновления до SQL Server 2005. После окончания обновления и тестирования под нагрузкой можно установить для параметра «Авторасширение» значение OFF или соответственно скорректировать значение приращения FILEGROWTH. Дополнительные сведения см. в разделе ALTER DATABASE (Transact-SQL).

Режим совместимости базы данных

При обновлении базы данных до SQL Server 2005 с любой более ранней версии SQL Server база данных сохраняет свой существующий уровень совместимости. Если после обновления базы данных установить уровень совместимости 90, то различия в уровне совместимости могут повлиять на приложения. Дополнительные сведения об этих различиях см. в разделе sp_dbcmptlevel (Transact-SQL).

Идентификатор базы данных 32767

В SQL Server 2005 этот идентификатор баз данных зарезервирован. Отсоедините базу данных до начала обновления.

Файловые группы

Все базы данных в экземпляре SQL Server должны иметь значение READ_WRITE для файловых групп до начала обновления до SQL Server 2005. Чтобы установить значение READ_WRITE для файловых групп, используйте инструкцию ALTER DATABASE.

Файлы журналов

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

Чтобы убедиться в том, что ресурсы позволяют справиться с увеличением размеров при обновлении и последующих рабочих операциях, рекомендуется установить для параметра «Авторасширение» значение ON для всех файлов журнала пользователей перед началом обновления до SQL Server 2005. После окончания обновления и тестирования под нагрузкой можно установить для параметра «Авторасширение» значение OFF или соответственно скорректировать значение приращения FILEGROWTH. Дополнительные сведения см. в разделе ALTER DATABASE (Transact-SQL).

База данных model

В SQL Server 2005 база данных model претерпела следующие изменения:

  • Увеличен минимальный размер.
  • Уровень совместимости установлен в 90.
  • Параметру базы данных PAGE_VERIFY присвоено значение CHECKSUM.

База данных tempdb

В SQL Server 2005 для файлов данных и журналов базы данных tempdb требуется дополнительное место на диске. Для обеспечения ресурсов, необходимых для увеличения размеров при обновлении и последующих рабочих операциях, рекомендуется установить параметр «Авторасширение» в значение ON для всех файлов данных и журналов базы данных tempdb перед началом обновления до SQL Server 2005. После окончания обновления и тестирования под нагрузкой можно установить для параметра «Авторасширение» значение OFF или соответственно скорректировать значение приращения FILEGROWTH.

Дополнительные сведения см. в разделе Устранение неполадок, связанных с нехваткой места на диске для базы данных tempdb.

Возможности

Функция

Описание

Расширенные хранимые процедуры

Расширенные хранимые процедуры, ранее зарегистрированные без указания полного пути к DLL, могут не работать после обновления до SQL Server 2005. Это происходит потому, что прежний каталог BINN в процессе обновления не добавляется к новому пути. SQL Server может не найти расширенные хранимые процедуры.

Перед началом обновления до SQL Server 2005 выполните следующие шаги для каждой расширенной хранимой процедуры, не зарегистрированной с использованием полного пути:

  1. Чтобы удалить расширенную хранимую процедуру, выполните хранимую процедуру sp_dropextendedproc.
  2. Чтобы зарегистрировать расширенную хранимую процедуру с указанием полного пути, выполните хранимую процедуру sp_addextendedproc.

Доставка журналов

Доставка журналов в более ранних версиях SQL Server несовместима с доставкой журналов в SQL Server 2005 и поэтому не может быть обновлена непосредственно. После обновления до SQL Server 2005 заново настройте доставку журналов, используя среду SQL Server Management Studio или хранимые процедуры. Дополнительные сведения см. в разделе Миграция конфигурации доставки журналов SQL Server 2000 в SQL Server 2005.

Программа osql

Программа osql не поддерживает команды ED и !!. Удалите ссылки на команды ED и !! из своих сценариев. Для использования команд ED и !! следует воспользоваться программой sqlcmd.

Поставщик WMI SQL-DMO

Поставщик WMI SQL-DMO больше не поддерживается и недоступен.

Служба SQL Mail

SQL Server поддерживает обновление службы SQL Mail от SQL Server 7.0 или SQL Server 2000, однако для SQL Server 2005 требуется использование в качестве почтового клиента Microsoft Outlook 2002 или более поздних версий.

ms143179.note(ru-ru,SQL.90).gifПримечание.

В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Чтобы отправить почту из SQL Server 2005, используйте компонент Database Mail.

Служба SQL Mail

Когда клиент, подключенный с использованием проверки подлинности SQL Server, попытается отправить с помощью службы SQL Mail почтовое сообщение с вложением, то SQL Server не сможет установить надлежащий контекст безопасности и вернет ошибку. Во избежание этой проблемы используйте проверку подлинности Windows.

API-интерфейс пространства имен SQL (SQL-NS)

API-интерфейс пространства имен SQL (SQL-NS) более не поддерживается и недоступен.

Флаги трассировки

В SQL Server 2000 флаги трассировки, установленные в сеансе A, не будут иметь силы в уже существующем сеансе B. Вместо этого флаги трассировки вступят в силу только после первой установки любого флага трассировки в сеансе B. Такое поведение является недетерминированным в SQL Server 2000 и детерминированным в SQL Server 2005. В SQL Server 2005 глобальные флаги трассировки, установленные в сеансе A, немедленно вступают в силу в других параллельных сеансах.

Кроме того, в SQL Server 2005 флаги трассировки могут быть объявлены как локально, так и глобально, с использованием дополнительного аргумента в инструкции DBCC TRACEON. Если второй аргумент не задан, по умолчанию в SQL Server 2005 принимается локальное объявление флагов. Это отличается от SQL Server 2000, где по умолчанию принимается глобальное объявление.

Дополнительные сведения см. в разделе Флаги трассировки (Transact-SQL).

Флаги трассировки

Некоторые флаги трассировки SQL Server 2000 отсутствуют в SQL Server 2005. Также некоторые флаги трассировки имеют в SQL Server 2005 другие функциональные возможности. Следует отключить все флаги трассировки перед началом обновления до SQL Server 2005. После окончания обновления убедитесь, что функции флагов трассировки не изменились. Также перед повторным включением любых флагов трассировки убедитесь, что они по-прежнему необходимы после обновления.

Триггеры

В SQL Server 2005 инструкции языка DDL (такие как CREATE INDEX) не могут выполняться со вставленными и удаленными таблицами внутри триггеров DML. В более ранних версиях SQL Server некоторые инструкции DDL могут применяться к вставленным и удаленным таблицам. Дополнительные сведения см. в разделе Использование таблиц inserted и deleted.

Повторяющиеся имена индексов

В SQL Server 2005 повторяющиеся имена индексов таблиц или представлений не допускаются. Перед началом обновления переименуйте индексы, чтобы устранить повторения.

  1. Определите расположение повторяющихся имен индексов, выполнив следующий запрос:

    SELECT DISTINCT OBJECT_NAME(o.id), name
    FROM sysindexes as o
    WHERE EXISTS 
        (SELECT name FROM sysindexes  as i
          WHERE i.id = o.id
          AND i.name = o.name and i.indid < o.indid);
    
  2. Для изменения одного из имен индексов используйте хранимую процедуру sp_rename. Поскольку имена индексов одинаковые, невозможно определить, какой из этих индексов будет переименован. Различить такие индексы позволит выполнение следующих действий.

    EXEC sp_rename N'table_name.index_name', N'new_index_name, N'INDEX'
    
  3. Проверьте, какой из индексов был переименован, выполнив следующий запрос. Следующий запрос возвращает все индексы, включая имена ключевых столбцов в указанной таблице или представлении:

    SELECT i.name AS IndexName, c.name AS ColumnName, ik.colid, ik.keyno
    FROM sysindexes i
    JOIN sysindexkeys ik ON i.id = ik.id and i.indid = ik.indid 
    JOIN syscolumns c ON c.id = ik.id and ik.colid = c.colid
    WHERE i.id = OBJECT_ID('table_or_view_name')
    
  4. Если это необходимо, снова используйте хранимую процедуру sp_rename для исправления имен индексов.

Имена объектов

В SQL Server 2005 нельзя использовать символ с кодом 0xFFFF в именах объектов. Имя объекта, в котором содержится этот символ Юникода, не может быть использовано в базах данных с уровнем совместимости 90. Переименуйте объекты, имена которых содержат этот символ.

Табличные переменные и выбор параметров сортировки столбцов

В SQL Server 2000 для столбцов, определенных в табличных переменных, неявно применяются параметры сортировки базы данных tempdb. В SQL Server 2005 для столбцов, определенных в табличных переменных, неявно применяются параметры сортировки текущей базы данных. Запросы, которые полагаются на поведение, использовавшееся в SQL Server 2000, могут возвращать непредвиденные результаты, в том числе другое число или другой порядок возвращенных строк.

Например, проверка равенства столбцов c1 и c2 в предложении WHERE следующей инструкции SELECT может вернуть меньшее или большее число строк, если вместо параметров сортировки базы данных tempdb используются параметры сортировки TestDB. В частности, значения «Имя» и «имя» будут считаться равными, если в параметрах сортировки не учитывается регистр, и различными, если в параметрах сортировки учитывается регистр.

CREATE DATABASE TestDB COLLATE Estonian_CS_AI;
GO
USE TestDB;
DECLARE @TempTable table (c1 varchar(10), c2 varchar(10);
SELECT * FROM @TempTable WHERE c1 = c2;

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

USE TestDB;
DECLARE @TempTable table (c1 varchar(10)COLLATE Latin1_General_CS_AS, c2 varchar(10)COLLATE Latin1_General_CS_AS);
SELECT * FROM @TempTable WHERE c1 = c2;
GO
-- or

DECLARE @TempTable table (c1 varchar(10), c2 varchar(10));
SELECT * FROM @TempTable WHERE c1 = c2 COLLATE Latin1_General_CS_AS;
GO

Индексированные представления

Функция Описание

Детерминизм функций

Следующие функциональные выражения считаются в SQL Server 2005 недетерминированными и поэтому могут помешать созданию индексированных представлений:

  • Ссылки на строковые литералы, неявно преобразуемые в типы данных datetime и smalldatetime.
  • Неявное преобразование символьных данных, представленных не в Юникоде, между различными параметрами сортировки.

Выражения, включающие неявные преобразования символьных строк в типы данных datetime или smalldatetime, считаются в SQL Server 2005 недетерминированными, если уровень совместимости не установлен меньшим или равным 80. Это связано с тем, что результаты зависят от значений параметров LANGUAGE и DATEFORMAT сеанса сервера. Например результат выражения CONVERT (datetime, '30 listopad 1996', 113) зависит от значения параметра LANGUAGE, поскольку строка «listopad» обозначает различные месяцы в разных языках. Аналогичным образом, вычисляя выражение DATEADD(mm,3,'2000-12-01'), SQL Server интерпретирует строку '2000-12-01' в соответствии со значением параметра DATEFORMAT.

Неявное преобразование символьных данных не в Юникоде между различными параметрами сортировки также считается недетерминированным, если только не установлен уровень совместимости 80 или менее.

Создание индексов в представлениях, содержащих эти выражения, не допускается в базах данных с уровнем совместимости 90. Несмотря на то, что существующие представления, содержащие такие выражения из обновленных баз данных, поддерживаются, оптимизатор запросов не будет учитывать их в планах запросов, если уровень совместимости равен 80 или 90. Дополнительные сведения о настройке уровней совместимости см. в разделе sp_dbcmptlevel (Transact-SQL).

При определении индексированных представлений в SQL Server 2005 необходимо явно преобразовать литералы в предпочитаемые типы данных при помощи детерминированного стиля форматирования даты. Список детерминированных стилей форматирования даты см. в разделе Функции CAST и CONVERT (Transact-SQL).

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

IGNORE_DUP_KEY

При создании уникального кластеризованного индекса в представлении SQL Server 2005 параметр IGNORE_DUP_KEY должен быть установлен в значение OFF. Это значение установлено по умолчанию. Установка параметра IGNORE_DUP_KEY в значение ON может привести к повреждению индексированных представлений.

Удалите кластеризованный индекс в представлении и создайте его вновь без указания параметра IGNORE_DUP_KEY.

Подсказки в запросах

Подсказки в запросах в определениях индексированных представлений при уровне совместимости 80 игнорируются. Это может привести к тому, что некоторые приложения начнут работать несколько иначе, чем при уровне совместимости 90. Дополнительные сведения см. в разделах Конструирование индексированных представлений, Создание индексированных представлений и Подсказка в запросе (Transact-SQL).

Безопасность

Функция Описание

Имена входа

Следующие имена фиксированных серверных ролей зарезервированы в SQL Server 2005 и не могут быть использованы как пользовательские имена входа:

  • sysadmin
  • serveradmin
  • setupadmin
  • securityadmin
  • processadmin
  • dbcreator
  • diskadmin
  • bulkadmin

Перед началом обновления до SQL Server 2005 выполните следующие шаги:

  1. Запишите идентификаторы безопасности имен входа, выполнив следующую инструкцию:

    SELECT name, sid 
    FROM master.dbo.syslogins 
    WHERE name IN('sysadmin', 'serveradmin','setupadmin',
     'securityadmin','processadmin', 'dbcreator','diskadmin',
     'bulkadmin')
  2. Удалите имена входа.
  3. Чтобы создать новое имя входа, воспользуйтесь системной процедурой sp_addlogin. В параметре @sid для каждого создаваемого имени входа укажите идентификатор безопасности, который был получен на шаге 1.

Идентификатор безопасности (SID)

В SQL Server 2005 повторяющиеся идентификаторы безопасности (SID) не допускаются. Перед началом обновления удалите одно из имен входа и связанных с ним пользователей.

Сопоставление удаленных имен входа

В предыдущих версиях SQL Server входящие соединения, поступавшие от удаленных экземпляров SQL Server, могли быть помечены как доверенные при помощи системной хранимой процедуры sp_remoteoption. SQL Server 2005 не поддерживает этот метод пометки удаленных имен входа. После обновления до SQL Server 2005 удаленные имена входа более не будут помечаться как доверенные.

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

Имена входа SQL Server 6.5

SQL Server 6.5 сохраняет кэши паролей в формате, который более не поддерживается. Старые пароли не могут быть напрямую обновлены до SQL Server 2005.

Чтобы активировать имя входа, необходимо сбросить его пароль. Можно сбросить пароль с помощью инструкции ALTER LOGIN:

ALTER LOGIN <login name> WITH PASSWORD = '<new password>' MUST_CHANGE

Новый пароль будет проверен на соответствие политике сложности паролей системы, если проверка политики не отключена. Рекомендуется использовать сложные пароли и не отключать политику проверки. Параметр MUST_CHANGE принуждает пользователя выбрать новый пароль. Это не обязательно, но рекомендуется.

Можно определить неактивные имена входа SQL Server 6.5 с помощью следующего запроса:

SELECT * FROM sysxlogins WHERE (xstatus & 2048) = 2048;
GO

Имя пользователя sys

Имя sys зарезервировано в SQL Server 2005 и не может быть использовано как имя пользователя. Переименуйте пользователя перед обновлением до SQL Server 2005. Если пользователь не переименован, то после обновления база данных будет помечена как подозрительная и будет недоступна до тех пор, пока не будет переведена в оперативный режим.

Процедура перед началом обновления

Перед обновлением до SQL Server 2005 в каждой базе данных, содержащей пользователя sys, выполните следующие действия.

  1. Создайте нового пользователя.
  2. Используйте следующие инструкции, чтобы просмотреть все разрешения, предоставленные пользователем sys и предоставленные пользователю sys.

    -- Return permissions granted by user sys.
    SELECT * FROM sysprotects WHERE grantor = USER_ID('sys')
    -- Return permissions granted to user sys.
    SELECT * FROM sysprotects WHERE uid = USER_ID('sys')
  3. Чтобы передать права всех объектов, принадлежащих пользователю sys, новому пользователю, используйте процедуру sp_changeobjectowner.
  4. Удалите пользователя sys.
  5. Чтобы восстановить первоначальные разрешения, записанные на шаге 2, используйте предложение AS new_user инструкции GRANT.
  6. Измените сценарии, чтобы они ссылались на нового пользователя.

Процедура после обновления

Если пользователь sys не был переименован перед обновлением, то сделайте следующее:

  1. Выполните инструкцию ALTER DATABASE db_name SET ONLINE. База данных перейдет в режим SINGLE_USER.
  2. Выполните все этапы, описанные в главе «Процедура перед началом обновления».
  3. Выполните инструкцию ALTER DATABASE db_name SET MULTI_USER.

Системные объекты и метаданные

Функция Описание

INFORMATION_SCHEMA.COLUMNS

В SQL Server 2005 столбец ORDINAL_POSITION представления INFORMATION_SCHEMA.COLUMNS не совместим с битовым шаблоном, возвращаемым функцией COLUMNS_UPDATED.

Чтобы получить битовый шаблон, совместимый с COLUMNS_UPDATED, обратитесь к свойству ColumnID системной функции COLUMNPROPERTY при запросе представления INFORMATION_SCHEMA.COLUMNS, как показано в следующем примере:

SELECT TABLE_NAME, COLUMN_NAME,
    COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME),
    COLUMN_NAME, 'ColumnID') AS COLUMN_ID
FROM AdventureWorks.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Contact';

INFORMATION_SCHEMA.SCHEMATA

В более ранних версиях SQL Server представление INFORMATION_SCHEMA.SCHEMATA возвращало все базы данных в экземпляре SQL Server. В SQL Server 2005 представление возвращает все схемы в базе данных. Это поведение соответствует стандарту SQL. Дополнительные сведения см. в разделе SCHEMATA (Transact-SQL).

Имена столбцов INFORMATION_SCHEMA, соответствующие значению «%SCHEMA»

В более ранних версиях SQL Server имена столбцов INFORMATION_SCHEMA, соответствующие значению %SCHEMA, возвращают имя пользователя. В SQL Server 2005 эти столбцы возвращают имя схемы. Когда база данных обновлена до SQL Server 2005, имя схемы всегда будет тем же, что и имя пользователя, поэтому работа любых приложений, ссылающихся на этот столбец, не будет нарушена. Однако пользователи, реализующие функции SQL Server 2005 для разделения пользователей и схем в своих базах данных, должны учитывать, что работа их приложений может нарушиться, если ожидаемыми данными является имя пользователя, а не имя схемы.

Дополнительные сведения см. в разделе Отделение пользователей от схем.

sp_helptrigger

SQL Server 2005 добавляет trigger_schema в качестве последнего столбца в результирующем наборе, возвращаемого системной хранимой процедурой sp_helptrigger. Проверьте использование процедуры sp_helptrigger в приложениях. Возможно, придется изменить приложения для обработки дополнительного столбца. Также можно использовать представление каталога sys.triggers.

syslockinfo и sp_lock

В SQL Server 2000 столбцы rsc_objid и rsc_indid в таблице syslockinfo, а также столбцы objid и indid хранимой процедуры sp_lock возвращают соответственно идентификатор объекта и идентификатор индекса. В SQL Server 2005 может возвращаться значение 0.

В SQL Server 2000 syslockinfo и sp_lock возвращают не более двух строк для любого отдельно взятого ресурса блокировки в единичной транзакции. В SQL Server 2005, если включено секционирование блокировок, то могут быть возвращены несколько строк для одного и того же ресурса, выполняющегося в рамках одной транзакции. Может возвращаться до N + 1 строк, где N — число процессоров. Кроме того, в SQL Server 2005 запросы GRANTED и WAITING могут отображаться для одного и того же ресурса. В службах SQL Server 2000 эти запросы не могут отображаться для одного ресурса. Дополнительные сведения см. в разделах sp_lock (Transact-SQL) и sys.syslockinfo (Transact-SQL).

Согласование параметров сортировки для имен системных объектов и имен системных типов

В более ранних версиях SQL Server для сопоставления имен системных объектов и имен системных типов использовались параметры сортировки базы данных master. В SQL Server 2005 имена системных объектов и имена системных типов автоматически приводятся в соответствие с параметрами сортировки текущей базы данных. Если ссылки на эти объекты в сценариях или приложениях не соответствуют тому, как они указаны в каталоге, а параметры сортировки текущей базы данных учитывают регистр, сценарий или приложение могут завершиться с ошибкой. Например инструкция EXEC SP_heLP не выполнится, если параметры сортировки текущей базы данных учитывают регистр.

Изменение системных объектов

В SQL Server 2005 не допускается непосредственное изменение системного каталога. Любая попытка сделать это приведет к возникновению следующей ошибки:

«Сервер: сообщение 259, уровень 16, состояние 2, строка 1»

«Нерегламентированные обновления системных каталогов запрещены».

Измените свои SQL-сценарии так, чтобы они использовали официальные документированные функции API-интерфейса. Например, используйте инструкцию ALTER DATABASE database_name SET EMERGENCY вместо запуска инструкции UPDATE в системной таблице sysdatabases.

Удаление системных объектов

Инструкции, такие как DROP TABLE и DROP PROCEDURE, и хранимая процедура sp_dropextendedproc не могут использоваться для удаления системных объектов, поскольку эти объекты размещены в базе данных Resource, доступной только для чтения.

Удалите из своих приложений все инструкции, которые пытаются удалить системные объекты. Измените свои приложения так, чтобы они отменяли или запрещали разрешение EXECUTE для системных объектов. В качестве альтернативы для отключения некоторых из этих объектов можно воспользоваться средствами конфигурации контактной зоны в составе SQL Server 2005. Например расширенная хранимая процедура xp_cmdshell может быть отключена и включена с помощью одного из средств настройки контактной зоны.

sysperfinfo

В SQL Server 2005 представление sysperfinfo возвращает для столбца cntr_value значение типа bigint. Внесите изменения в приложения, использующие представление sysperfinfo, чтобы убедиться, что они могут обрабатывать значения типа bigint в столбце cntr_value.

В SQL Server 2005 представление sysperfinfo является представлением совместимости. Вместо него следует использовать динамическое административное представление sys.dm_os_performance_counters.

Системные таблицы, запрашиваемые с использованием 'dbo' в критерии поиска

В более ранних версиях SQL Server системные объекты принадлежали пользователю dbo и располагались в базе данных master. В SQL Server 2005 системные объекты принадлежат пользователю sys и логически присутствуют в каждой базе данных. Инструкции, запрашивающие системные таблицы и использующие в критериях поиска ссылку на пользователя dbo, будут завершаться с ошибкой.

Transact-SQL

Функция Описание

@@VERSION

SQL Server 2005 возвращает более подробные сведения, чем SQL Server 2000, в формате: основная_версия.вспомогательная_версия.номер_сборки.дополнительный_номер_сборки.

CREATE STATISTICS

Указание параметра WITH ROWS внутри инструкций CREATE STATISTICS не поддерживается в SQL Server 2005. Измените инструкции CREATE STATISTICS, содержащие параметр WITH ROWS, указав ключевое слово SAMPLE number между WITH и ROWS, или укажите другие параметры, соответствующие документированному синтаксису.

DISK INIT

Инструкция DISK INIT, используемая в более ранних версиях SQL Server для создания базы данных или устройства ведения журнала транзакций, была изъята из SQL Server 2005. Замените все вхождения инструкции DISK INIT на эквивалентные инструкции CREATE DATABASE и ALTER DATABASE.

Использование оператора UNION внутри инструкции INSERT INTO...SELECT

Если оператор UNION находится внутри инструкции INSERT, то SQL Server 2005 самостоятельно проводит приведение типов данных каждого оператора UNION согласно правилам приведения типов данных. Затем типы данных конечного результата операции UNION приводятся к типам соответствующих столбцов таблицы, указанной операцией INSERT. Это изменение поведения операторов может вызвать ошибки приведения типов данных в приложениях.

Следующий пример показывает ошибку приведения типов данных. При уровне совместимости 80 и ниже целочисленная константа 1 в первой инструкции SELECT приводится непосредственно к типу данных целевого столбца ReturnedValue, каковым является varchar(255). При уровне совместимости 90 тип данных результирующего набора UNION определяется до приведения к типу данных целевого столбца. Для второго столбца в первой инструкции SELECT тип данных определен как int. Для второго столбца во второй инструкции SELECT тип данных определен как varchar(4). Поскольку тип данных int имеет больший приоритет, чем тип данных varchar(4), при определении типа данных результирующего набора оператора UNION значение test будет приведено к типу данных int, что вызовет ошибку преобразования типов данных.

CREATE TABLE #test(ReturnedName varchar(255) NOT NULL,
  ReturnedValue varchar(255) NULL)
INSERT INTO #test 
SELECT 'col1', 1
UNION ALL
SELECT 'test', 'test'
DROP TABLE #test

UPDATETEXT

SQL Server 2005 не поддерживает использование текстовых указателей в инструкциях UPDATETEXT, которые используются для чтения и записи одного и того же большого бинарного объекта (BLOB) посредством одного и того же текстового указателя. Скопируйте объект BLOB во временную таблицу или переменную-таблицу, а затем снова присвойте значение исходному столбцу.

Ключевое слово WITH при использовании табличных подсказок

В SQL Server 2005, с некоторыми исключениями, табличные подсказки поддерживаются в предложении FROM запроса только в том случае, когда подсказки указаны с ключевым словом WITH.

Дополнительные сведения см. в разделах FROM (Transact-SQL) и Табличная подсказка (Transact-SQL).

Предложение ORDER BY в определении представления

В SQL Server 2005 предложение ORDER BY в определении представления применяется только для определения того, какие строки будут возвращены по предложению TOP. Предложение ORDER BY не гарантирует упорядочивания результатов при запросе представления, если оно не указано в самом запросе.

Инструкция UPDATE с подсказками блокировки

В SQL Server 2000 подсказки блокировки не проверяются на наличие конфликтов в инструкции UPDATE, если выполняются оба следующих условия:

  • Таблица в предложении FROM представлена псевдонимом.
  • Та же таблица упоминается как целевая в инструкции UPDATE без псевдонима.

SQL Server не обрабатывает подсказки блокировки, указанные в предложении FROM и не вызывает ошибку, если подсказки конфликтуют. В SQL Server 2005 ошибка возвращается, если подсказки блокировки конфликтуют с этими условиями.

XML

Функция Описание

OPENXML

Ввиду изменений в MSXML OPENXML более не поддерживает нецелые позиционные предикаты. В SQL Server 2005 базовым ядром, обрабатывающим выражения XPath, используемые в запросах OPENXML, является MSXML 3.0. MSXML 3.0 имеет ядро, в большей степени соответствующее спецификации XPath 1.0, где была изменена семантика нецелых значений в позиционных предикатах.

Например, выражение XPath a[5.1] теперь не возвращает ни одного элемента вместо пятого элемента <a>. Чтобы исправить это, непосредственно используйте округленные значения. Например измените предыдущий пример на a[5].

Выражения OPENXML XPath

MSXML 3.0 имеет ядро, более строго соответствующее спецификации XPath 1.0, где была отменена поддержка следующих функций:

  • format-number()
  • formatNumber()
  • current()
  • element-available()
  • function-available()
  • system-property()

Вместо функций format-number() и formatNumber() можно использовать Transact-SQL. Для других неподдерживаемых функций не имеется непосредственной альтернативы.

Определяемый пользователем тип данных «xml»

В SQL Server 2005 xml является зарезервированным системным типом. Используйте процедуру sp_rename для переименования типа либо до начала обновления, либо после окончания обновления и измените приложения для работы с новым именем типа данных.

См. также

Справочник

Изменения в работе функций компонента Database Engine в SQL Server 2005
Устаревшие функции ядра СУБД в SQL Server 2005
Неподдерживаемые функции ядра СУБД в SQL Server 2005

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

Обратная совместимость компонента SQL Server 2005 Database Engine
sp_dbcmptlevel (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

17 ноября 2008 г.

Добавления
  • В раздел «Возможности» добавлена запись о совпадении параметров сортировки для столбцов в табличных переменных.

14 апреля 2006 г.

Добавления
  • Добавлен элемент в разделе Transact-SQL об использовании ORDER BY в определении представления.
  • Добавлен элемент в разделе Transact-SQL об использовании подсказок блокировки в инструкции UPDATE.