Controllo della verifica dei vincoli tramite operazioni di importazione di massa

Data aggiornamento: 12 dicembre 2006

Quando si importano dati in massa, è possibile decidere se applicare o meno i vincoli CHECK e FOREIGN KEY durante l'operazione di importazione. Un vincolo è una regola business applicata a una colonna per definirne i valori validi. Ad esempio, un vincolo per una colonna contenente interni di numeri telefonici richiedere il formato ####. La definizione e la verifica dei vincoli rappresentano il meccanismo standard per applicare l'integrità dei dati. Microsoft consiglia di utilizzare regolarmente la verifica dei vincoli durante un'importazione di massa incrementale.

Talvolta i vincoli possono essere ignorati. Una situazione di questo tipo può verificarsi se i dati di input contengono righe che violano i vincoli. Ignorando i vincoli, è possibile caricare i dati e quindi utilizzare istruzioni Transact-SQL per riorganizzare i dati.

Se la tabella non è vuota prima dell'operazione di importazione di massa, l'impegno per la riconvalida dei vincoli può essere superiore all'impegno per l'applicazione dei vincoli CHECK e FOREIGN KEY ai dati incrementali. In seguito all'importazione di dati con errori, è necessario utilizzare Transact-SQL per riorganizzare i dati importati.

ms186247.note(it-it,SQL.90).gifImportante:
Quando i vincoli sono disattivati, è possibile che venga applicato un blocco di modifica dello schema per aggiornare i metadati. Questa operazione può interferire con altri comandi, ad esempio la creazione di un indice in linea, o transazioni. È ad esempio possibile che una transazione di isolamento dello snapshot che accede alla tabella di destinazione abbia esito negativo a causa di modifiche DDL simultanee.

Per ulteriori informazioni sui vincoli, vedere Vincoli.

Durante un'operazione di importazione di massa, il comportamento della verifica dei vincoli dipende dal comando utilizzato per l'operazione. Per impostazione predefinita, il comando bcp e l'istruzione BULK INSERT ignorano i vincoli. Per un'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...), invece, il comportamento predefinito consiste nel verificare i vincoli.

Nella tabella seguente è incluso un riepilogo del comportamento di verifica dei vincoli dei comandi di importazione di massa.

Comando Comportamento predefinito

bcp

I vincoli vengono ignorati

BULK INSERT

I vincoli vengono ignorati

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

I vincoli vengono verificati

Ogni comando di importazione di massa include un qualificatore che consente di modificare le modalità di gestione dei vincoli, come illustrato nelle sezioni seguenti.

Verifica dei vincoli con bcp o BULK INSERT

Per impostazione predefinita, i vincoli vengono ignorati durante un'operazione di importazione di massa eseguita dal comando bcp o dall'istruzione BULK INSERT.

Il comando bcp e l'istruzione BULK INSERT consentono di specificare che i vincoli devono essere applicati durante un'operazione di importazione di massa. L'applicazione dei vincoli provoca il rallentamento dell'operazione di importazione di massa, ma garantisce che tutti i dati inseriti non violino alcun vincolo esistente. Nella tabella seguente è incluso un riepilogo dei qualificatori che è possibile utilizzare per specificare l'applicazione di vincoli durante un'operazione di importazione di massa.

Comando Qualificatore Tipo di qualificatore

bcp

-h"CHECK_CONSTRAINTS"

Hint

BULK INSERT

CHECK_CONSTRAINTS

Argomento

Per ulteriori informazioni, vedere Utilità bcp e BULK INSERT (Transact-SQL).

Ignorare i vincoli in INSERT ... SELECT * FROM OPENROWSET(BULK...)

Per impostazione predefinita, l'istruzione INSERT controlla i vincoli CHECK e FOREIGN KEY. L'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...), tuttavia, consente di ignorare la verifica dei vincoli CHECK e FOREIGN KEY. .

[!NOTA] Non è possibile disattivare i vincoli UNIQUE, PRIMARY KEY o NOT NULL.

Nella tabella seguente è incluso un riepilogo dell'hint di tabella per ignorare i vincoli CHECK e FOREIGN KEY.

Comando Qualificatore Tipo di qualificatore

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

WITH (IGNORE_CONSTRAINTS)

Hint di tabella

Nell'esempio seguente viene illustrato l'utilizzo di questo qualificatore. Per ulteriori informazioni sull'hint IGNORE_CONSTRAINTS, vedere table_hint (Transact-SQL).

Verifica dell'avvenuta importazione dei dati

Se si ignorano vincoli durante un'operazione di importazione di massa, i dati che violano i vincoli esistenti possono essere inseriti nella tabella. Ogni vincolo ignorato nella tabella viene pertanto contrassegnato come is_not_trusted nella vista del catalogo sys.check_constraints o sys.foreign_keys. In un determinato momento sarà necessario controllare i vincoli nell'intera tabella.

Per individuare le righe di tabella importate che violano i vincoli, è possibile controllare manualmente i dati importati utilizzando query Transact-SQL o stored procedure per testare le condizioni di vincolo.

Vedere anche

Altre risorse

Utilità bcp
BULK INSERT (Transact-SQL)
DBCC CHECKCONSTRAINTS (Transact-SQL)
INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
table_hint (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Contenuto modificato:
  • Revisione dell'argomento per indicare che i vincoli CHECK e FOREIGN KEY vengono controllati assieme.