2011-12-05 2 views
17

Ho uno script per eliminare tutte le tabelle nel mio database che assomiglia a questo:errore l'eliminazione di tutte le tabelle "DELETE riuscita perché le seguenti opzioni SET dispone di impostazioni non corrette: 'QUOTED_IDENTIFIER'"

-- Disable all constraints 
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT all' 

-- Disable all triggers 
EXEC EnableAllTriggers @Enable = 0 

-- Delete data in all tables 
EXEC sp_MSForEachTable 'DELETE FROM ?' 

-- Dnable all constraints 
EXEC sp_MSForEachTable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all' 

-- Reseed identity columns 
EXEC sp_MSForEachTable 'DBCC CHECKIDENT (''?'', RESEED, 0)' 

-- Enable all triggers 
EXEC EnableAllTriggers @Enable = 1 

quando si colpisce il ELIMINA la riga ottengo questo errore per alcune delle tabelle:

DELETE non riuscita perché le seguenti opzioni SET hanno impostazioni errate: "QUOTED_IDENTIFIER". Verificare che le opzioni SET siano corrette per l'uso con viste indicizzate e/o indici su colonne calcolate e/o indici filtrati e/o notifiche di query e/o metodi di tipo di dati XML e/o operazioni su indici spaziali.

Non ho viste indicizzate, tutte le chiavi esterne e i trigger sono disabilitati, quindi non so quale causa questo errore. Qualche idea?

+0

Sai che sp causa il problema eseguendo uno alla volta? –

+0

Come nota a margine, se si desidera eliminare tutto da una tabella, utilizzare 'TRUNCATE' poiché è molto più veloce. – JNK

+1

@JNK Non è possibile troncare una tabella a cui fa riferimento una chiave esterna (anche se i vincoli sono stati impostati su 'NOCHECK' per la domanda). – Iridium

risposta

35

Aggiungere le opzioni SET alla chiamata di eliminazione.

Questi si applicano anche alle altre voci menzionate nell'errore, anche se sono stati disabilitati gli FK.

Questo aggirare le impostazioni salvate o di ambiente

Edit, dopo il commento

EXEC sp_MSForEachTable 'SET QUOTED_IDENTIFIER ON; DELETE FROM ?' 
+0

Come si aggiungono le opzioni SET a un comando DELETE? – CodeGrue

+0

Un esempio sarebbe davvero bello ... – Rob

+0

@Rob nel mio caso è stato semplicemente aggiungere una riga sopra lo script SET 'QUOTED_IDENTIFIER' ON (ad esempio SET ANSI_WARNINGS ON) – Tomek

Problemi correlati