Share via


Eliminazione di righe utilizzando l'istruzione DELETE

Data aggiornamento: 14 aprile 2006

L'istruzione DELETE elimina una o più righe da una tabella o vista.

Di seguito viene riportata una forma semplificata della sintassi di DELETE:

DELETE table_or_view

FROM table_sources

WHERE search_condition

Il parametro table_or_view specifica la tabella o vista da cui eliminare le righe. Vengono eliminate tutte le righe di table_or_view che soddisfano le condizioni di ricerca della clausola WHERE. Se la clausola WHERE non è stata specificata, vengono eliminate tutte le righe di table_or_view. Nella clausola FROM vengono specificate altre tabelle o viste e condizioni di join utilizzabili dai predicati della condizione di ricerca della clausola WHERE per qualificare le righe da eliminare da table_or_view.. Le righe non vengono eliminata dalle tabelle menzionate nella clausola FROM, ma solo dalla tabella menzionata in table_or_view.

Le tabelle da cui vengono rimosse tutte le righe rimangono comunque nel database. L'istruzione DELETE infatti elimina solo le righe della tabella. Per rimuovere la tabella dal database, è necessario utilizzare l'istruzione DROP TABLE.

Eliminazione di righe da un heap

Quando vengono eliminate righe da un heap, Motore di database potrebbe utilizzare blocchi a livello di riga o di pagina per l'operazione. Di conseguenza, le pagine rese vuote dall'operazione di eliminazione rimangono allocate all'heap. Se le pagine vuote non vengono deallocate, lo spazio associato non può essere riutilizzato da altri oggetti nel database.

Per eliminare righe in un heap e deallocare pagine, utilizzare uno dei metodi seguenti.

  • Specificare l'hint TABLOCK nell'istruzione DELETE. Tramite l'utilizzo dell'hint TABLOCK, l'operazione di eliminazione considera un blocco condiviso nella tabella anziché un blocco a livello di riga o di pagina. In questo modo è possibile deallocare le pagine. Per ulteriori informazioni sull'hint TABLOCK, vedere table_hint (Transact-SQL).
  • Utilizzare TRUNCATE TABLE se tutte le righe devono essere eliminate dalla tabella.
  • Creare un indice cluster nell'heap prima di eliminare le righe. È possibile rimuovere l'indice cluster dopo aver eliminato le righe. Questo metodo richiede tempi più lunghi rispetto ai metodi precedenti e utilizza un maggior numero di risorse temporanee.

Per ulteriori informazioni sui blocchi, vedere Utilizzo dei blocchi in Motore di database.

Esempi

Nell'esempio seguente vengono eliminate tutte le righe dalla tabella SalesPersonQuotaHistory in quanto una clausola WHERE non è utilizzata per limitare il numero di righe eliminate.

USE AdventureWorks;
GO
DELETE FROM Sales.SalesPersonQuotaHistory;
GO

Nell'esempio seguente vengono eliminate tutte le righe dalla tabella ProductCostHistory nella quale il valore della colonna StandardCost è maggiore di 1000.00.

USE AdventureWorks;
GO
DELETE FROM Production.ProductCostHistory
WHERE StandardCost > 1000.00;
GO

In questo esempio viene illustrata l'estensione Transact-SQL che consente di eliminare i record da una tabella di base basata su un join o una subquery correlata. La prima istruzione DELETE illustra la soluzione di subquery compatibile con SQL 2003, mentre la seconda istruzione DELETE illustra l'estensione Transact-SQL. Entrambe le query rimuovono righe dalla tabella SalesPersonQuotaHistory in base alle vendite dell'ultimo anno archiviate nella tabella SalesPerson.

-- SQL-2003 Standard subquery

USE AdventureWorks;
GO
DELETE FROM Sales.SalesPersonQuotaHistory 
WHERE SalesPersonID IN 
    (SELECT SalesPersonID 
     FROM Sales.SalesPerson 
     WHERE SalesYTD > 2500000.00);
GO

-- Transact-SQL extension
USE AdventureWorks;
GO
DELETE FROM Sales.SalesPersonQuotaHistory 
FROM Sales.SalesPersonQuotaHistory AS spqh
    INNER JOIN Sales.SalesPerson AS sp
    ON spqh.SalesPersonID = sp.SalesPersonID
WHERE sp.SalesYTD > 2500000.00;
GO

Vedere anche

Concetti

Eliminazione di righe dai set di risultati
Eliminazione di tutte le righe con l'istruzione TRUNCATE TABLE
Impostazione di limiti per le righe eliminate utilizzando la clausola TOP

Altre risorse

DROP TABLE (Transact-SQL)
DELETE (Transact-SQL)
Eliminazione di dati in una tabella

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

14 aprile 2006

Nuovo contenuto:
  • Aggiunta della sezione "Eliminazione di righe da un heap".