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
Cronologia modifiche
Versione | Cronologia |
---|---|
14 aprile 2006 |
|