Bulk insert (transact-sql)

Ім'я бази даних, в якій знаходиться зазначена таблиця або подання. Якщо не вказано, передбачається поточна база даних.

Ім'я схеми таблиці або подання. Вказівка ​​аргументу schema_name необов'язково, якщо схемою за замовчуванням для користувача, що виконує операцію масового імпорту, є схема зазначеної таблиці або подання. Якщо аргумент schema не вказано і схема за замовчуванням для користувача, що виконує операцію масового імпорту, відрізняється від схеми таблиці або подання, SQL Server повертає повідомлення про помилку і операція масового імпорту не виконується.

Ім'я таблиці або подання, куди проводиться масовий імпорт даних. Можуть вказуватися тільки ті уявлення, в яких всі стовпці відносяться до однієї і тієї ж базової таблиці. Додаткові відомості про обмеження при завантаженні даних в уявлення см. В розділі Інструкція INSERT (Transact-SQL).

Повний шлях і ім'я файлу даних, який містить імпортовані в зазначену таблицю або подання дані. Інструкція BULK INSERT може імпортувати дані з диска (мережевого, гнучкого, жорсткого і т. Д.).

Аргумент data_file повинен містити дійсний шлях з того сервера, на якому запущено SQL Server. Якщо аргумент data_file є віддаленим файлом, вказуйте ім'я в форматі UNC. Ім'я UNC має вигляд \\ Systemname \ ShareName \ Path \ FileName. Наприклад, \\ SystemX \ DiskZ \ Sales \ update.txt.

Вказує число рядків в одному пакеті. Кожен пакет копіюється на сервер за одну транзакцію. SQL Server фіксує або відкочується транзакцію для кожного з пакетів. За замовчуванням, всі дані, що містяться в файлі, передаються одним пакетом. Додаткові відомості про питання продуктивності см. В підрозділі «Примітки» далі в цьому розділі.

Вказує, що при виконанні операції масового імпорту буде виконуватися перевірка всіх обмежень цільової таблиці або подання. Без параметра CHECK_CONSTRAINTS всі обмеження CHECK і FOREIGN KEY пропускаються, і після завершення операції обмеження таблиці позначається як ненадійне.

Обмеження UNIQUE, PRIMARY KEY і NOT NULL перевіряються в будь-якому випадку.

Рано чи пізно необхідно перевіряти всю таблицю на відповідність обмеженням. Якщо таблиця перед початком операції масового імпорту була не порожня, витрати на повторну перевірку обмежень можуть перевищити витрати на застосування обмежень CHECK до додатковим даними.

Відключення перевірки обмежень (настройка за замовчуванням) може знадобитися в тих ситуаціях, коли вхідні дані містять рядки, що порушують ці обмеження. Можна виконати імпорт даних при відключеному перевірці обмежень CHECK, а потім за допомогою інструкцій Transact-SQL видалити неприпустимі дані.

У власних типах бази даних, за винятком стовпців типу char. varchar і text. в яких дані зберігаються в Юникоде. Файл даних типу widenative створений шляхом масового імпорту даних з SQL Server за допомогою програми bcp.

Тип widenative забезпечує більш високу продуктивність у порівнянні з widechar. Якщо файл даних містить символи національного алфавіту ANSI, вкажіть значення widenative.

Вказує ознака кінця поля, який використовується для файлів даних типу char і widechar. За замовчуванням, ознакою кінця поля є символ табуляції (\ t). Додаткові відомості див. У розділі Визначення ознак кінця поля і рядки.

Вказує номер першого рядка для завантаження. Значення за замовчуванням - перший рядок зазначеного файлу даних. Значення аргументу FIRSTROW починаються з 1.

Атрибут FIRSTROW не призначений для пропуску заголовків стовпців. Пропуск заголовків не підтримує інструкцією BULK INSERT. При пропуску рядків компонент SQL Server Database Engine виконує пошук тільки в ознаках кінця поля і не перевіряє дані в полях пропущених рядків.

Вказує, що при масовому імпорті будуть виконуватися тригери типу INSERT, певні для цільової таблиці. Якщо для операції INSERT визначені тригери в цільовій таблиці, вони будуть спрацьовувати для кожного завантаженого пакету.

Якщо параметр FIRE_TRIGGERS не вказано, тригери Insert не виконуються.

Вказує повний шлях до файлу форматування. Файл форматування містить опис файлу даних - відомості, отримані за допомогою програми bcp на такий же таблиці або поданні. І призначений для випадків, коли:

файл даних містить більше або менше стовпців, ніж таблиця або подання;

стовпці розташовані в іншому порядку;

відрізняються роздільники стовпців;

Вказує, що значення або значення ідентифікаторів в файлі імпортованих даних будуть використовуватися для стовпця ідентифікаторів. Якщо параметр KEEPIDENTITY не вказано, значення ідентифікаторів для цього стовпця перевіряються, але не імпортуються, а SQL Server автоматично призначає унікальні значення на основі початкового значення і збільшення, зазначених при створенні таблиці. Якщо файл даних не містить значень для стовпця ідентифікаторів, вкажіть у файлі форматування, що стовпець ідентифікаторів в таблиці або поданні при імпорті даних слід пропустити. У цьому випадку SQL Server автоматично призначить унікальні значення для цього стовпця. Додаткові відомості див. У розділі DBCC CHECKIDENT (Transact-SQL).

Вказує, що порожнім стовпцями при масовому імпорті повинні присвоюватися значення NULL, а не значення за замовчуванням, призначені для цих стовпців. Додаткові відомості див. У розділі Збереження значень NULL або використання значень за замовчуванням при масовому імпорті даних.

Визначає приблизне число кілобайт даних в пакеті як kilobytes_per_batch. За замовчуванням, значення KILOBYTES_PER_BATCH невідомо. Додаткові відомості про питання продуктивності см. В підрозділі «Примітки» далі в цьому розділі.

Вказує номер останнього рядка для завантаження. Значення за замовчуванням 0, що позначає останній рядок в зазначеному файлі даних.

Вкажіть максимальну кількість синтаксичних помилок, допустимих для файлу даних, перш ніж операція масового імпорту буде скасована. Кожен рядок, імпорт якої при масовому імпорті не може бути виконаний, пропускається і вважається за одну помилку. Якщо аргумент max_errors не вказано, значення за замовчуванням дорівнює 10.

Параметр MAX_ERRORS не застосовує перевірки обмеження або перетворення типів даних money і bigint.

Вказує, яким чином відсортовані дані у файлі. Продуктивність масового імпорту збільшується, якщо імпортовані дані впорядковані відповідно до кластерізованний індексу таблиці (при наявності). Якщо файл даних впорядкований в іншому порядку, тобто в порядку відмінному від порядку ключа кластерізованного індексу або якщо в таблиці відсутня кластерізованний індекс, то пропозиція ORDER не обробляється. У цільовій таблиці повинні бути вказані імена стовпців. За замовчуванням, операція масової вставки вважає, що файл даних не впорядкований. Для оптимізованого масового імпорту SQL Server також перевіряє сортування імпортованих даних.

Местозаполнітель, що означає, що може бути зазначено кілька стовпців.

Вказує приблизне число рядків у файлі даних.

За замовчуванням всі дані у файлі відправляються на сервер за одну транзакцію, а число рядків в пакеті оптимізатора запитів невідомо. Якщо вказати аргумент ROWS_PER_BATCH (зі значенням> 0), сервер буде використовувати це значення для оптимізації операції масового імпорту. Значення, вказане в ROWS_PER_BATCH, має приблизно збігатися з фактичним числом рядків. Додаткові відомості про питання продуктивності см. В підрозділі «Примітки» далі в цьому розділі.

Вказує ознака кінця рядка, який використовується для файлів даних типу char і widechar. За замовчуванням ознакою кінця рядка є символ \ r \ n (символ розриву рядків). Додаткові відомості див. У розділі Визначення ознак кінця поля і рядки.

Вказує, щоб Вас запитували блокування рівня таблиці на час виконання масового імпорту. Якщо таблиця не має індексів і вказано ключове слово TABLOCK, завантаження в таблицю може проводитися паралельно декількома клієнтами. За замовчуванням робота блокування визначається параметром таблиці table lock on bulk load. Блокування на час виконання масового імпорту значно підвищує продуктивність, дозволяючи знизити конфлікти блокувань таблиці. Додаткові відомості про питання продуктивності см. В підрозділі «Примітки» далі в цьому розділі.

Вказує файл, який використовується для збору рядків, які мають помилки форматування і не можуть бути перетворені в набір рядків OLE DB. Ці рядки без змін копіюються з файлу даних в файл помилок.

Файл помилок створюється на стадії виконання команди. Якщо він вже існує, виникає помилка. Додатково створюється керуючий файл з розширенням ERROR.txt. в якому містяться посилання на кожну з рядків у файлі помилок і діагностичні відомості. Після виправлення помилок ці дані можуть бути повторно завантажені.

Порівняння інструкції BULK INSERT, інструкції INSERT. SELECT * FROM OPENROWSET (BULK.) І команди bcp см. В розділі Операції масового імпорту і масового експорту.

Додаткові відомості про підготовку даних для масового імпорту, наприклад вимоги при імпорті даних з CSV-файлу, див. В розділі Підготовка даних до масового експорту або імпорту.

Інструкція BULK INSERT може бути виконана в призначеній для користувача транзакції. Відкат користувальницької транзакції, що містить інструкцію BULK INSERT з пропозицією BATCHSIZE, яка провадить імпорт даних в таблицю або подання декількома пакетами, викликає відкат всіх пакетів, відправлених на SQL Server.

Відомості про те, коли в журналі транзакцій реєструються операції вставки рядків, що виконуються при масовому імпорті, див. Розділ Попередні умови для мінімального ведення журналу масового імпорту даних.

власні уявлення типів даних float або real є допустимими;

дані в Юникоде мають парну довжину.

Для даних в невірному форматі, які в попередніх версіях SQL Server завантажувалися, операція масового імпорту може не виконатися. У попередніх версіях SQL Server помилка не відбувається до тих пір, поки клієнт не намагається отримати доступ до неприпустимих даними. Більш сувора перевірка знижує ймовірність непередбачених ситуацій під час запиту даних після масового імпорту.

обмеження

При використанні файлу форматування з інструкції BULK INSERT можна вказати не більше 1024 поля. Це значення збігається з максимальним числом стовпців в таблиці. При використанні інструкції BULK INSERT з файлом даних, який містить більше 1024 полів, формується помилка 4822. Програма bcp не має цього обмеження, тому для файлів даних, які містять більше 1024 поля, використовуйте команди bcp.

питання продуктивності

У зв'язку з відмінностями в комп'ютерах рекомендується випробувати свою робоче навантаження з різними розмірами пакетів, щоб виявити оптимальний варіант.

Масовий експорт або імпорт документів SQLXML

Для масового експорту або імпорту даних SQLXML використовується один з наступних типів даних в файлі форматування.

Однак інструкція BULK INSERT не зможе виконати імпорт цих даних безпосередньо в таблицю t_float. так як другий стовпець c2 має тип даних decimal. Тому необхідний файл форматування. У ньому дані типу float в експоненційному поданні повинні бути співставлені десятичному формату стовпця c2.

Наступний файл форматування використовує тип даних SQLFLT8 для зіставлення другого поля даних з другим стовпцем:

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

Для імпорту значень ідентифікаторів з файлу даних вказано параметр 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.).

А. Застосування вертикальної риси як ознака кінця стовпчика при імпорті даних з файлу