Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Правка_Руководство к 1 лр.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
115.7 Кб
Скачать

Пример импорта числового значения в экспоненциальном представлении

В этом примере используется следующая таблица:

CREATE TABLE t_float(c1 float, c2 decimal (5,4))

Пользователю необходимо выполнить массовый импорт данных в таблицу t_float. Файл данных «C:\t_float-c.dat» содержит данные в экспоненциальном представлении float, например:

8.0000000000000002E-28.0000000000000002E-2

Однако инструкция BULK INSERT не сможет выполнить импорт этих данных непосредственно в таблицу t_float, так как второй столбец c2 имеет тип данных decimal. Поэтому необходим файл форматирования. В нем данные типа float в экспоненциальном представлении должны быть сопоставлены десятичному формату столбца c2.

Следующий файл форматирования использует тип данных SQLFLT8 для сопоставления второго поля данных со вторым столбцом:

<?xml version="1.0"?>

<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<RECORD>

<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>

<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30"/> </RECORD> <ROW>

<COLUMN SOURCE="1" NAME="c1" xsi:type="SQLFLT8"/>

<COLUMN SOURCE="2" NAME="c2" xsi:type="SQLFLT8"/> </ROW> </BCPFORMAT>

Чтобы задействовать этот файл форматирования (файл C:\t_floatformat-c-xml.xml) при импорте тестовых данных в тестовую таблицу, необходимо выполнить следующую инструкцию Transact-SQL:

BULK INSERT bulktest..t_float

FROM 'C:\t_float-c.dat' WITH (FORMATFILE='C:\t_floatformat-c-xml.xml');

GO

Разрешения

Требует разрешений INSERT и ADMINISTER BULK OPERATIONS. Кроме того, необходимо разрешение ALTER TABLE, если выполняется одно из следующих условий.

  • Существуют ограничения, и параметр CHECK_CONSTRAINTS не указан.

    Примечание

    Ограничения отключены по умолчанию. Чтобы проверить ограничения явно, укажите параметр CHECK_CONSTRAINTS.

  • Триггеры существуют, и параметр FIRE_TRIGGER не указан.

    Примечание

    По умолчанию, триггеры не срабатывают. Чтобы явно включить триггеры, укажите параметр FIRE_TRIGGER.

  • Для импорта значений идентификаторов из файла данных указан параметр KEEPIDENTITY.

Делегирование учетных записей безопасности (Олицетворение)

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

Если с помощью программы sqlcmd или osql инструкция BULK INSERT выполняется на одном компьютере, вставка данных происходит в SQL Server на другом компьютере, а аргумент data_file указывает на третий компьютер с помощью UNC-пути, может возникнуть ошибка 4861.

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

Дополнительные сведения об этих и других вопросах безопасности при использовании инструкции BULK INSERT см. в разделе Массовый импорт данных при помощи инструкции BULK INSERT или OPENROWSET(BULK...).

Примеры