Condividi tramite


Eliminazione di tutte le righe con l'istruzione TRUNCATE TABLE

L'istruzione TRUNCATE TABLE rappresenta un sistema rapido, non registrato, per l'eliminazione di tutte le righe di una tabella. TRUNCATE TABLE è identica dal punto di vista funzionale a un'istruzione DELETE senza la clausola WHERE, tuttavia è più rapida e utilizza un numero minore di risorse di sistema e del log delle transazioni.

Rispetto all'istruzione DELETE, TRUNCATE TABLE offre i vantaggi seguenti:

  • Viene utilizzato meno spazio del log delle transazioni.
    L'istruzione DELETE rimuove una riga alla volta e registra una voce nel log delle transazioni per ogni riga eliminata. L'istruzione TRUNCATE TABLE rimuove i dati tramite la deallocazione delle pagine di dati utilizzate per archiviare i dati della tabella. Solo le deallocazioni di pagina vengono registrate nel log delle transazioni.
  • Viene in genere utilizzato un numero di blocchi inferiore.
    Se l'istruzione DELETE viene eseguita utilizzando un blocco di riga, ogni riga della tabella viene bloccata per l'eliminazione. TRUNCATE TABLE blocca sempre la tabella e la pagina, ma non ogni riga.
  • Le pagine vuote vengono lasciate nella tabella.
    Dopo che è stata eseguita un'istruzione DELETE, è possibile che nella tabella siano ancora presenti numerose pagine vuote. Ad esempio, non è possibile deallocare le pagine vuote in un heap senza almeno un blocco di tabella esclusivo (LCK_M_X). Se per l'operazione di eliminazione non viene utilizzato un blocco di tabella, la tabella (heap) conterrà numerose pagine vuote. Per gli indici, è possibile che dopo l'eliminazione rimangano pagine vuote, che tuttavia verranno rapidamente deallocate tramite un processo di pulitura in background.

In modo analogo all'istruzione DELETE, la definizione di una tabella che risulta vuota in seguito all'esecuzione di TRUNCATE TABLE rimane nel database insieme a tutti gli indici e agli oggetti associati.

Troncamento di tabelle di grandi dimensioni

Con Microsoft SQL Server 2005 è possibile eliminare o troncare le tabelle contenenti più di 128 extent senza che vengano mantenuti simultaneamente blocchi su tutti gli extent necessari per l'operazione di eliminazione. Per ulteriori informazioni, vedere Eliminazione e ricostruzione di oggetti di grandi dimensioni.

Esempi

Nell'esempio seguente vengono rimossi tutti i dati dalla tabella JobCandidate. Prima e dopo l'istruzione TRUNCATE TABLE vengono inserite istruzioni SELECT per confrontare i risultati.

USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount 
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount 
FROM HumanResources.JobCandidate;
GO

Vedere anche

Concetti

Eliminazione di righe utilizzando l'istruzione DELETE
Eliminazione di righe dai set di risultati
Impostazione di limiti per le righe eliminate utilizzando la clausola TOP

Altre risorse

DROP TABLE (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005