SQL - статьи




SQL Server в вопросах и ответах


, #03/2000

В: У меня на разных компьютерах установлено два SQL Server 7.0. Для обмена данными между ними я использовал Data Transformation Services (DTS), чтобы импортировать данные на компьютер-адресат. Выбрав нужные данные, я начал передавать их, и DTS выдал сообщение, что все объекты и данные импортированы успешно. Однако поля типа VARCHAR, ранее содержавшие 500-1000 слов, теперь, на компьютере-получателе, были установлены в NULL. Некоторые записи содержали кавычки, и я предположил, что сервер "споткнулся" на этом. Однако если дело в кавычках, то SQL Server должен был бы корректно импортировать остальные данные - не содержащие кавычек. В чем моя ошибка?

О: Действительно, у DTS бывают сбои при обработке длинных символьных полей из больших массивов входных данных. Иногда эту проблему можно решить, убрав флажок Fast Load на закладке Advanced диалога Transformation Task Properties. Если не поможет, стоит попробовать использовать для импорта данных bulk copy program (bcp). Хотя bcp не так проста в применении, как DTS, это позволит избежать подобных ошибок. Для примера стоит прочитать статью Microsoft "BUG: DTS Transfer Does Not Report Error When Input File is Missing Text Qualifier in Last Row" , где подтверждается, что при передаче данных DTS не выдает сообщение об ошибке при импорте последней строки входного файла в таблицу SQL Server, если входной файл содержит текстовые описатели, а в последнем столбце такой описатель пропущен. Чтобы обойти это препятствие, следует вручную отредактировать входной файл.

Кроме того, описанную проблему могли вызвать системные настройки по обработке значений Null. Вопреки стандарту ANSI, SQL Server по умолчанию создает столбцы, не принимающие значений Null, если только явно не использовать соответствующие объявления в операторах CREATE TABLE или ALTER TABLE.

Странно, но и ODBC и OLE DB обходят эту установку. Можно попробовать использовать различные опции для тонкой настройки работы с Null. На уровне базы данных для выбора метода работы (ANSI, или режим обратной совместимости SQL Server) можно применять функцию sp_dboption. Кроме того, имеется возможность менять параметры установок конкретного сеанса связи с базой, с помощью команды Transact SQL (T-SQL) SET ANSI_NULL_DFLT {ON | OFF}, а для определения текущих установок обработки Null пользоваться функцией GETANSINULL().

В: Что такое утилита ScriptPkg в Data Transformation Services (DTS) и где ее найти?




Содержание  Назад  Вперед