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

Изменения: 12 декабря 2006 г.

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

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

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

ms186247.note(ru-ru,SQL.90).gifВажно!
При отключенных ограничениях для обновления метаданных, возможно, потребуется применение блокировки изменения схемы. Это может помешать работе других команд (например, оперативному построению индексов) или транзакций. Например, в транзакции в режиме изоляции моментальных снимков при доступе к целевой таблице может возникнуть ошибка из-за параллельно вносимых изменений 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 и FOREIGN KEY. Однако инструкция INSERT ... SELECT * FROM OPENROWSET(BULK...) позволяет переопределить проверку ограничений CHECK и FOREIGN KEY.

ms186247.note(ru-ru,SQL.90).gifПримечание.
Нельзя отключить ограничения UNIQUE, PRIMARY KEY или NOT NULL.

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

Команда Квалификатор Тип квалификатора

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

WITH (IGNORE_CONSTRAINTS)

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

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

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

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

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

См. также

Другие ресурсы

Программа bcp
BULK INSERT (Transact-SQL)
DBCC CHECKCONSTRAINTS (Transact-SQL)
INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
Табличная подсказка (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Измененное содержимое
  • В раздел внесено изменение, указывающее, что ограничения CHECK и FOREIGN KEY управляются совместно.