Techn
В: Я установил на разные машины SQL Server 6.5 и SQL Server 7.0 и воспользовался мастером Data Transformations Services (DTS) Import для преобразования базы данных SQL Server 6.5 в формат SQL Server 7.0. Однако вместо диалога указания сервера-источника и исходной базы данных я получил следующее сообщение об ошибке DTS.

DTS Wizard Error
Error Source: Microsoft OLE DB Provider for SQL Server
Error Description: The catalog stored procedures installed on server FS7 are version 6.50.193; version 07.00.0330 or later required to support IDBSchemaRowset. Please contact your system administrator.
Context: Error calling GetRowset to get Schema info. Your provider does not support all the interfaces/methods required by DTS.

Правильно ли я выбрал инструмент для преобразования данных SQL Server 6.5 в формат SQL Server 7.0?

О: Вы задаете два вопроса: «почему DTS не работает при попытке перенести данные из машины с SQL Server 6.5 на машину SQL Server 7.0» и «верно ли я выбрал метод для модернизации базы данных SQL Server 6.5 до SQL Server 7.0».

Ответим на первый вопрос. DTS отказывается работать по той причине, что машина с SQL Server 6.5 содержит старую версию хранимых процедур. Обновление каталоговых процедур осуществляется путем запуска на машине с SQL Server 6.5 сценария instcat.sql, находящегося в каталоге mssql7install. Это делается путем ввода в командной строке следующей инструкции Interactive SQL (ISQL):

C:> ISQL -Usa -Psa_password 
-Sserver_name -ilocation Instcat.sql.

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

Что касается второго вопроса, мы не обладаем достаточной информацией о DTS Import Wizard, чтобы знать, верный ли способ модернизации базы данных вы выбрали. Однако мы подозреваем, что вам лучше всего было воспользоваться именно этим мастером. Microsoft приложила массу усилий, чтобы максимально приблизить мастер обновления к идеалу и сделать выдаваемые им подсказки как можно более информативными. Возможно, кто-то не знает о существовании этого мастера, потому что его значок не появляется в меню Start после установки SQL Server 7.0, если до этого на системе не было SQL Server 6.5. Мастер обновления находится в каталоге mssql7upgrade и называется upgrade.exe.

В: В одной из моих систем с SQL Server 7.0 используется версия bcp (bulk copy program) от SQL Server 6.5, а в другой — bcp 7.00.623. Имеется ли в SQL Server установка, определяющая, какую версию bcp использовать?

О: Bcp не является частью сервера; это просто программа на Си, которая обращается к функциям API-интерфейса работы с базами данных. Bcp запускается из командной строки Windows NT или 95.

Думаем, ваши затруднения возникли вследствие того, что на одной и той же машине у вас имеются разные исполняемые файлы с одинаковыми именами. Вероятно, на вашей системе установлен набор клиентских инструментов SQL Server 6.5, и в переменной окружения Path путь к старой версии упомянут раньше пути к новой.

Чтобы посмотреть, в каком порядке перечисляются каталоги поиска программ, наберите Path в командной строке NT. Затем удалите все копии старой версии bcp. Для их поиска можно воспользоваться позицией Find меню Tools в Explorer.

В: В SQL Server 7.0 имеется функция IDENTITY, отличающаяся от свойства IDENTITY. Для чего нужна эта новая функция?

О: В SQL Server 7.0 появилась функция Transact SQL (T-SQL) IDENTITY. Она похожа на свойство IDENTITY, которое указывает, что столбец представляет собой поле, автоматически увеличивающее свое значение. Однако функция IDENTITY используется только в команде SELECT INTO и имеет следующий синтаксис:

IDENTITY(тип_данных[, начальное_значение, приращение]) AS имя столбца

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

SELECT
  stor_id,
  title_id,
  qty,

  IDENTITY(smallint) AS RankCol
INTO
  Ranking
FROM
  pubs..sales
ORDER BY
  RankCol
GO
SELECT TOP 10 * FROM Ranking
GO
stor_id title_id qty RankCol
6380 BU1032 5 1
6380 PS2091 3 2
7066 PC8888 50 3
7066 PS2091 75 4
7067 PS2091 10 5
7067 TC3218 40 6
7067 TC4203 20 7
7067 TC7777 20 8
7131 PS2091 20 9
7131 MC3021 25 10
РИСУНОК 1: Пример результатов работы функции Identity

На рисунке 1 показан результат работы этой программы. Впоследствии столбец RankCol мы могли бы использовать в операторе управляюшую конструкцию WHERE или извлечь как часть нашего набора результатов.

В: Я изменил установки ANSI в sp_configure и sp_dboption (в частности, установил ANSI nulls в значение OFF), но Query Analyzer игнорирует изменения, и мне приходится вручную вводить их каждый раз при входе в систему. Что с этим можно поделать?

ЭКРАН 1: Установка подразумеваемыхзначений параметров для соединений Query Analyzer

О: Sp_adoption и sp_configure позволяют глобально изменить некоторые аспекты поведения ANSI SQL-92, поэтому установки влияют на всех пользователей определенного сервера или базы данных (вернее, sp_configure контролирует установки на уровне сервера, а sp_dboption — на уровне базы данных). Однако когда какое-либо приложение подключается к SQL Server, устанавливаемое им соединение может изменить любой из параметров ANSI, модифицированный при помощи sp_dboption и sp_configure. Query Analyzer представляет собой программу на Си, которая подключается к SQL-серверу при помощи тех же API-интерфейсов работы с базами данных, к которым имеете доступ и вы.

Чтобы решить проблему, вы можете каждый раз при соединении запускать из Query Analyzer соответствующие команды SET или изменить установки по умолчанию для всех новых соединений Query Analyzer. Для этого запустите Query Analyzer и выберите пункт Configure в меню File. С помощью закладки New Connection, показанной на экране 1, можно задать поведение по умолчанию для всех новых соединений Query Analyzer.