Usuwanie wierszy za pomocą DELETE

Instrukcja DELETE Usuwa jeden lub więcej wierszy w tabela lub widoku.

Uproszczonej formie DELETE Składnia jest:

DELETE table_or_view

FROM table_sources

WHERE search_condition

Parametr table_or_view nazwy tabela lub widoku, z której wiersze mają zostać usunięte.Wszystkie wiersze w table_or_view spełniających kwalifikacji WHERE warunek wyszukiwania są usuwane.Jeśli klauzula WHERE nie jest określony, wszystkie wiersze w table_or_view są usuwane.Klauzula FROM Określa dodatkowe tabele lub widoki i warunków łączyć, które mogą być używane przez predykaty warunek wyszukiwania klauzuli WHERE kwalifikują się wierszy, które mają być usunięte z table_or_view. wierszy nie są usuwane z tabel wymienionych w klauzuli FROM, tylko z tabela o nazwie w table_or_view.

Tabela, w której wszystkie wiersze są usuwane pozostaje w bazie danych.Instrukcja DELETE Usuwa tylko wiersze z tabela; należy usunąć tabela z bazy danych przy użyciu instrukcja DROP tabela.

Usuwanie wierszy z sterty

Jeśli wiersze są usuwane z sterty Aparat baz danych mogą używać wiersza lub strona blokowania dla operacji.W wyniku strony wprowadzone puste przez operacji usuwania pozostają przydzielone do sterty.Gdy puste strony nie są cofniętych przydziałów, skojarzony miejsca nie można użyć ponownie przez inne obiekty w bazie danych.

Aby usunąć wiersze w sterty i Cofnij przydzielanie strony, użyj jednej z następujących metod.

  • Określ wskazówkę TABLOCK w instrukcja DELETE.Użycie wskazówka TABLOCK powoduje operacji usuwania do podjęcia blokada współużytkowana w tabela zamiast lock wiersza lub strona.Dzięki temu stron do przydzielenia.Więcej informacji o TABLOCK wskazówki, zobacz Wskazówki tabel (Transact-SQL).

  • Jeśli wszystkie wiersze są usuwane z tabela, należy użyć tabela OBCINANIA.

  • Tworzenie indeks klastrowany na stercie, przed usunięciem wierszy.Po usunięciu wierszy, można usunąć indeks klastrowany.Metoda ta jest bardziej czas czasochłonne niż poprzednich metod i wykorzystuje więcej zasobów tymczasowych.

Aby uzyskać więcej informacji na temat blokowania, zobacz Blokowanie w aparacie bazy danych.

Przykłady

W następującym przykładzie usunięto wszystkie wiersze z SalesPersonQuotaHistory tabela, ponieważ klauzula WHERE nie jest używane do ograniczania liczby usunięte wiersze.

USE AdventureWorks2008R2;
GO
DELETE FROM Sales.SalesPersonQuotaHistory;
GO

W następującym przykładzie usunięto wszystkie wiersze z ProductCostHistory tabela, w którym wartość w StandardCost Kolumna jest więcej niż 1000.00.

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

W poniższym przykładzie Transact-SQL rozszerzenia używane do usuwania rekordów z tabela podstawowej, oparty na łączyć lub skorelowane podzapytanie.Pierwszy DELETE Instrukcja zawiera rozwiązania zgodne podzapytanie ISO, a drugi DELETE zawiera instrukcję Transact-SQL rozszerzenia.Zarówno kwerendy Usuń wiersze z SalesPersonQuotaHistory tabela na podstawie roku-do-data sprzedaży są przechowywane w SalesPerson tabela.

-- SQL-2003 Standard subquery

USE AdventureWorks2008R2;
GO
DELETE FROM Sales.SalesPersonQuotaHistory 
WHERE BusinessEntityID IN 
    (SELECT BusinessEntityID 
     FROM Sales.SalesPerson 
     WHERE SalesYTD > 2500000.00);
GO
-- Transact-SQL extension
USE AdventureWorks2008R2;
GO
DELETE FROM Sales.SalesPersonQuotaHistory 
FROM Sales.SalesPersonQuotaHistory AS spqh
INNER JOIN Sales.SalesPerson AS sp
ON spqh.BusinessEntityID = sp.BusinessEntityID
WHERE sp.SalesYTD > 2500000.00;

GO