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