2013-11-27 13 views
17

Uso SSIS per generare e trasformare nuovi dati per l'utilizzo futuro in un nuovo sistema. Ho un problema ogni volta che eseguo il mio pacchetto SSIS, continua a inserire nuovi record nelle mie tabelle di destinazione.Come svuotare la tabella di destinazione prima di inserire nuovi record in SSIS?

Come è possibile svuotare la tabella di destinazione (/ Destinazione OLE DB) prima di inserire i record appena creati?

Attualmente la soluzione per questo problema è eseguire un delete from DestTable prima di eseguire il pacchetto.

+0

Metti la tua istruzione delete in un Esegui SQL Task' '. Quindi rendi il primo componente del tuo flusso. – TsSkTo

+0

Potrebbe essere la soluzione, puoi darla come risposta. – SamekaTV

risposta

32

Metti la tua istruzione delete in un Execute SQL Task. Quindi rendi il primo componente del tuo flusso. La componente simile a questa:

enter image description here

+15

'TRUNCATE TABLE ' è * molto * migliore per le tabelle con molte righe. Non solo sarà più veloce, non riempirà il registro delle transazioni. Ho avuto un arresto anomalo del server del database di produzione a causa di un registro delle transazioni che riempiva il disco dopo l'esecuzione di un comando "DELETE FROM" su una tabella con 30 milioni di righe. – Dan

-2

è necessario utilizzare questo

truncate table table_name 

questo svuota la tabella

+0

Voglio applicarlo in SSIS e smettere di utilizzare la soluzione alternativa – SamekaTV

+0

è possibile inserire questo in attività exe-sql, 'elimina dalla tabella' e' truncate table' fa la stessa cosa !! –

+3

Davvero non lo fanno. Sono * simili *, ma tuttavia diversi. Ecco un link http://www.mssqltips.com/sqlservertip/1080/deleting-data-in-sql-server-with-truncate-vs-delete-commands/ – TsSkTo

25

creare un'attività Esegui SQL. Fallo per primo. Per lo sqlstatment fare.

Truncate table DestTable 

Utilizzando troncare la tabella è meglio quindi utilizzando eliminare in quanto ignora tutti gli indici e solo rimuove tutto.

Per informazioni di base. Proverò a spiegare perché dovresti usare la tabella troncata invece di eliminare la tabella. Elimina tabella è un'operazione basata su righe, ciò significa che ogni riga viene eliminata. Tronca tabella è un'operazione di una pagina di dati l'intera pagina di dati è delocalizzata. Se hai una tabella con un milione di righe sarà molto più veloce troncare la tabella, allora sarebbe usare una tabella di cancellazione.

+0

sei sicuro di questo? –

+0

È come lo faccio.Sono sicuro che ci sono molti modi diversi per rimuovere i dati dalle tabelle di stage prima di ricaricare nuove informazioni. Ognuno ha il proprio modo di fare le cose. – DaImTo

+2

+1 - Non mi interessa davvero quale sia il migliore. Ma la spiegazione che hai dato riguardo alla velocità è importante. Ma ho la risposta per il mio problema che è ciò che è importante. Puoi fare una domanda su questo [deve essere secondo le regole di Overflow dello stack] – SamekaTV

4

Un avvertimento sull'utilizzo del tavolo Truncate, funziona meglio per i motivi indicati. Tuttavia richiede anche ulteriori privilegi per l'account del sistema SSIS. Dovresti essere sicuro che quelli sono disponibili in produzione, altrimenti dovrai usare Cancella.

MSDN Reference

Problemi correlati