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çã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.
Importante |
---|
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çã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çã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). |