Controlando verificação de restrição por operações de importação em massa

Ao importar dados em massa, é possível controlar se as restrições CHECK são impostas pela operação de importação em massa. Uma restrição é uma regra comercial colocada em uma coluna para definir seus valores válidos; por exemplo, uma restrição para uma coluna que contém ramais de telefone poderia exigir o formulário #. Definição e verificação de restrições são os mecanismos padrão para impor a integridade de dados. O Microsoft recomenda que, em geral, você use a verificação de restrição durante uma importação em massa incremental.

Às vezes, você pode ignorar restrições. Um cenário de exemplo será se seus dados de entrada contiverem linhas que violam restrições. Ignorando as restrições, você pode carregar os dados e, em seguida, usar instruções Transact-SQL para limpar os dados.

ObservaçãoObservação

Ao ignorar restrições durante uma operação de importação em massa, dados que violam restrições existentes podem ser inseridos na tabela. Portanto, a restrição na tabela é marcada como is_not_trusted na exibição do catálogo sys.check_constraints (para obter mais informações, consulte sys.check_constraints (Transact-SQL)). Em algum momento, você precisará verificar as restrições em toda a tabela.

Se a tabela fosse não vazia antes da operação de importação em massa, o custo de revalidação da restrição poderia exceder o custo de se aplicar restrições CHECK aos dados incrementais. Depois de importar dados problemáticos, você deve usar Transact-SQL para limpar os dados importados.

Observação importanteImportante

Quando as restrições forem desabilitadas, um bloqueio de modificação de esquema poderá ser efetuado para atualizar os metadados. Isso pode interferir em outros comandos (como uma montagem de índice online) ou transações. Por exemplo, uma transação de isolamento de instantâneo que acessa a tabela de destino poderia falhar devido a mudanças de DDL simultâneas.

Para obter mais informações sobre restrições, consulte Restrições.

Durante uma operação de importação em massa, o comportamento da verificação de restrição depende do comando usado para a operação. Por padrão, o comando bcp e a instrução BULK INSERT ignoram restrições. Por outro lado, para uma instrução INSERT... SELECT * FROM OPENROWSET(BULK...), o padrão é verificar restrições.

A tabela a seguir resume o comportamento padrão de verificação de restrição dos comandos de importação em massa.

Comando

Comportamento padrão

bcp

Ignorar restrições

BULK INSERT

Ignorar restrições

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

Verificar restrições

Cada um dos comandos de importação em massa fornece um qualificador que lhe permite alterar a maneira como as restrições são tratadas, conforme explicação nas seções a seguir.

Verificando restrições com bcp ou BULK INSERT

Por padrão, são ignoradas restrições durante uma operação da importação em massa executada pelo comando bcp ou pela instrução BULK INSERT.

O comando bcp e a instrução BULK INSERT lhe permitem especificar que restrições devem ser aplicadas durante uma operação de importação em massa. Ao aplicar restrições a velocidade da operação de importação em massa diminui, mas fica assegurado que todos os dados inseridos não violam nenhuma restrição existente. A tabela a seguir resume os qualificadores que você pode usar para especificar a aplicação de restrições durante uma operação de importação em massa.

Comando

Qualificador

Tipo de qualificador

bcp

-h"CHECK_CONSTRAINTS"

Dica

BULK INSERT

CHECK_CONSTRAINTS

Argumento

Para obter mais informações, consulte Utilitário bcp e BULK INSERT (Transact-SQL).

Ignorando restrições em INSERT... SELECT * FROM OPENROWSET(BULK...)

Por padrão, INSERT verifica restrições CHECK, porém, a instrução INSERT... SELECT * FROM OPENROWSET(BULK...) lhe permite substituir a verificação das restrições CHECK. Para obter informações sobre essas restrições, consulte Restrições CHECK.

ObservaçãoObservação

Somente as restrições CHECK podem ser desabilitadas. Não é possível desabilitar as restrições UNIQUE, PRIMARY KEY, FOREIGN KEY ou NOT NULL.

A tabela a seguir resume a dica de tabela para ignorar restrições CHECK.

Comando

Qualificador

Tipo de qualificador

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

WITH (IGNORE_CONSTRAINTS)

Dica de tabela

O exemplo a seguir ilustra como usar esse qualificador. Para obter mais informações sobre a dica IGNORE_CONSTRAINTS, consulte Dicas de tabela (Transact-SQL).

Verificando importação de dados

Se você ignorar restrições em uma operação de importação em massa, mais tarde será possível identificar linhas de tabela importadas que violam restrições, verificando os dados importados manualmente. Para verificar os dados manualmente, pode você usar consultas Transact-SQL ou procedimentos armazenados que testam as condições de restrição.

ObservaçãoObservação

Para saber se uma tabela é confiável, consulte a coluna is_not_trusted na exibição do catálogo sys.check_constraints. Para obter mais informações, consulte sys.check_constraints (Transact-SQL).