Управление проверкой ограничений при операциях массового импорта
Изменения: 12 декабря 2006 г.
При массовом импортировании данных можно проверить, осуществляется ли принудительный вызов ограничений CHECK и FOREIGN KEY операцией массового импорта. Ограничение — это бизнес-правило, которое налагается на столбец для определения его допустимых значений; например ограничения для столбца, содержащего телефонные расширения, может потребовать форму ####. Определение и проверка ограничений являются стандартными механизмами для обеспечения целостности данных. Корпорация Майкрософт рекомендует использование проверки ограничений во время добавочного массового импорта.
Иногда может потребоваться пропустить ограничения. Примерный сценарий — это когда входные данные содержат строки, нарушающие ограничения. Пропуская ограничения, можно загрузить данные и затем использовать инструкции Transact-SQL для очистки данных.
Если таблица была непустой до операции массового импорта данных, стоимость повторной проверки правильности ограничения может превысить стоимость применения ограничений CHECK и FOREIGN KEY к добавочным данным. Выполнив импорт проблематичных данных, необходимо применить 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 и FOREIGN KEY. Однако инструкция INSERT ... SELECT * FROM OPENROWSET(BULK...) позволяет переопределить проверку ограничений CHECK и FOREIGN KEY.
Примечание. |
---|
Нельзя отключить ограничения 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 г. |
|