Управление проверкой ограничений при операциях массового импорта

При массовом импортировании данных можно проверить, осуществляется ли принудительный вызов ограничений CHECK операцией массового импорта. Ограничение — это бизнес-правило, которое налагается на столбец для определения его допустимых значений; например ограничения для столбца, содержащего телефонные расширения, может потребовать форму ####. Определение и проверка ограничений являются стандартными механизмами для обеспечения целостности данных. Корпорация Майкрософт рекомендует использование проверки ограничений во время добавочного массового импорта.

Иногда может потребоваться пропустить ограничения. Примерный сценарий — это когда входные данные содержат строки, нарушающие ограничения. Пропуская ограничения, можно загрузить данные и затем использовать инструкции Transact-SQL для очистки данных.

ПримечаниеПримечание

Если ограничения во время операции массового импорта не учитываются, то данные, нарушающие существующие ограничения, могут быть вставлены в таблицу. Таким образом, ограничение в таблице помечается как is_not_trusted в представлении каталога sys.check_constraints (дополнительные сведения см. в разделе sys.check_constraints (Transact-SQL)). На некотором этапе понадобится проверить ограничения во всей таблице.

Если таблица была непустой до операции массового импорта данных, стоимость повторной проверки правильности ограничения может превысить стоимость применения ограничений CHECK к добавочным данным. Выполнив импорт проблематичных данных, необходимо применить Transact-SQL для очистки импортированных данных.

Важное примечаниеВажно!

При отключенных ограничениях для обновления метаданных, возможно, потребуется применение блокировки изменения схемы. Это может помешать работе других команд (например оперативному построению индексов) или транзакций. Например, в транзакции в режиме изоляции моментальных снимков при доступе к целевой таблице может возникнуть ошибка из-за параллельно вносимых изменений DDL.

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

При выполнении операции массового импорта поведение проверки ограничений зависит от команды, используемой для этой операции. По умолчанию команда bcp и инструкция BULK INSERT пропускают ограничения. Напротив, для инструкции INSERT ... SELECT * FROM OPENROWSET(BULK...) по умолчанию установлена проверка ограничений.

В следующей таблице представлены поведения проверки ограничений по умолчанию для команд массового импорта.

Команда

Поведение по умолчанию

bcp

Не учитывать ограничения

BULK INSERT

Не учитывать ограничения

INSERT ... SELECT * FROM OPENROWSET(BULK...)

Проверочные ограничения

Каждая команда массового импорта предоставляет квалификатор, позволяющий изменять управление ограничениями, как описано в следующих разделах.

Проверка ограничений при помощи команды bcp или инструкции BULK INSERT

По умолчанию при операции массового импорта, выполняемой командой bcp или инструкцией BULK INSERT, ограничения не учитываются.

Команда bcp и инструкция BULK INSERT позволяют указывать, что ограничения должны принудительно выполняться при операции массового импорта. Принудительное выполнение ограничений замедляет операцию массового импорта, но гарантирует, что вставляемые данные не нарушают существующих ограничений. В следующей таблице представлены квалификаторы, которые можно использовать для указания принудительного выполнения ограничений при операции массового импорта.

Команда

Квалификатор

Тип квалификатора

bcp

-h"CHECK_CONSTRAINTS"

Подсказка

BULK INSERT

CHECK_CONSTRAINTS

Аргумент

Дополнительные сведения см. в разделах Программа bcp и BULK INSERT (Transact-SQL).

Пропуск ограничений в инструкции INSERT ... SELECT * FROM OPENROWSET(BULK...)

По умолчанию инструкция INSERT проверяет ограничения CHECK, тем не менее инструкция INSERT ... SELECT * FROM OPENROWSET(BULK...) позволяет переопределить проверку ограничений CHECK. Сведения об этих ограничениях см. в разделе Ограничения CHECK.

ПримечаниеПримечание

Только ограничения CHECK могут быть отключены. Нельзя отключить ограничения UNIQUE, PRIMARY KEY, FOREIGN KEY или NOT NULL.

В следующей таблице представлены табличные подсказки для пропуска ограничений CHECK.

Команда

Квалификатор

Тип квалификатора

INSERT ... SELECT * FROM OPENROWSET(BULK...)

WITH (IGNORE_CONSTRAINTS)

Табличная подсказка

Следующий пример демонстрирует использование этого квалификатора. Дополнительные сведения о подсказках IGNORE_CONSTRAINTS см. в разделе Табличные подсказки (Transact-SQL).

Проверка осуществления импорта данных

При пропускании ограничений во время выполнения операции массового импорта позже можно определить строки импортируемой таблицы, осуществив ручную проверку импортированных данных. Для выполнения ручной проверки данных можно использовать запросы Transact-SQL или хранимые процедуры, проверяющие состояние ограничений.

ПримечаниеПримечание

Проверить достоверность таблицы можно в столбце is_not_trusted в представлении каталога sys.check_constraints. Дополнительные сведения см. в разделе sys.check_constraints (Transact-SQL).