Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Magazyn w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Usuwa co najmniej jeden wiersz z tabeli lub widoku w programie SQL Server.
Transact-SQL konwencje składni
Syntax
-- Syntax for SQL Server and Azure SQL Database
[ WITH <common_table_expression> [ ,...n ] ]
DELETE
[ TOP ( expression ) [ PERCENT ] ]
[ FROM ]
{ { table_alias
| <object>
| rowset_function_limited
[ WITH ( table_hint_limited [ ...n ] ) ] }
| @table_variable
}
[ <OUTPUT Clause> ]
[ FROM table_source [ ,...n ] ]
[ WHERE { <search_condition>
| { [ CURRENT OF
{ { [ GLOBAL ] cursor_name }
| cursor_variable_name
}
]
}
}
]
[ OPTION ( <Query Hint> [ ,...n ] ) ]
[; ]
<object> ::=
{
[ server_name.database_name.schema_name.
| database_name. [ schema_name ] .
| schema_name.
]
table_or_view_name
}
-- Syntax for Azure Synapse Analytics and Microsoft Fabric
[ WITH <common_table_expression> [ ,...n ] ]
DELETE [database_name . [ schema ] . | schema. ] table_name
FROM [database_name . [ schema ] . | schema. ] table_name
JOIN {<join_table_source>}[ ,...n ]
ON <join_condition>
[ WHERE <search_condition> ]
[ OPTION ( <query_options> [ ,...n ] ) ]
[; ]
<join_table_source> ::=
{
[ database_name . [ schema_name ] . | schema_name . ] table_or_view_name [ AS ] table_or_view_alias
[ <tablesample_clause>]
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
}
-- Syntax for Parallel Data Warehouse
DELETE
[ FROM [database_name . [ schema ] . | schema. ] table_name ]
[ WHERE <search_condition> ]
[ OPTION ( <query_options> [ ,...n ] ) ]
[; ]
Arguments
Z <common_table_expression>
Określa tymczasowy nazwany zestaw wyników, znany również jako wspólne wyrażenie tabeli zdefiniowane w zakresie instrukcji DELETE. Zestaw wyników pochodzi z instrukcji SELECT.
Typowe wyrażenia tabeli mogą być również używane z instrukcjami SELECT, INSERT, UPDATE i CREATE VIEW. Aby uzyskać więcej informacji, zobacz WITH common_table_expression (Transact-SQL).
TOP (wyrażenie) [ PERCENT ]
Określa liczbę lub procent losowych wierszy, które zostaną usunięte.
wyrażenie może być liczbą lub procentem wierszy. Wiersze, do których odwołuje się wyrażenie TOP używane z instrukcjami INSERT, UPDATE lub DELETE, nie są rozmieszczane w żadnej kolejności. Aby uzyskać więcej informacji, zobacz TOP (Transact-SQL).
FROM
Opcjonalne słowo kluczowe, którego można użyć między słowem kluczowym DELETE a docelowym table_or_view_name lub rowset_function_limited.
table_alias
Alias określony w klauzuli FROM table_source reprezentującej tabelę lub widok, z którego mają zostać usunięte wiersze.
server_name
Dotyczy: SQL Server 2008 (10.0.x) i nowszych.
Nazwa serwera (przy użyciu nazwy serwera połączonego lub funkcji OPENDATASOURCE jako nazwy serwera), w której znajduje się tabela lub widok. Jeśli określono server_name , wymagane są database_name i schema_name .
database_name
Nazwa bazy danych.
schema_name
Nazwa schematu, do którego należy tabela lub widok.
table_or_view_name
Nazwa tabeli lub widoku, z którego mają zostać usunięte wiersze.
Zmienna tabeli w zakresie może być również używana jako źródło tabeli w instrukcji DELETE.
Widok, do którego odwołuje się table_or_view_name , musi być aktualizowalny i odwoływać się do dokładnie jednej tabeli bazowej w klauzuli FROM definicji widoku. Aby uzyskać więcej informacji na temat aktualizowalnych widoków, zobacz CREATE VIEW (Transact-SQL).
rowset_function_limited
Dotyczy: SQL Server 2008 (10.0.x) i nowszych.
Funkcja OPENQUERY lub OPENROWSET podlega możliwościom dostawcy.
Z (<table_hint_limited> [... n] )
Określa co najmniej jedną wskazówkę tabeli dozwoloną dla tabeli docelowej. Słowo kluczowe WITH i nawiasy są wymagane. NOLOCK i READUNCOMMITTED są niedozwolone. Aby uzyskać więcej informacji na temat wskazówek dotyczących tabel, zobacz Wskazówki dotyczące tabel (Transact-SQL).
<OUTPUT_Clause>
Zwraca usunięte wiersze lub wyrażenia na ich podstawie w ramach operacji DELETE. Klauzula OUTPUT nie jest obsługiwana w żadnych instrukcjach DML przeznaczonych dla widoków ani tabel zdalnych. Aby uzyskać więcej informacji na temat argumentów i zachowania tej klauzuli, zobacz OUTPUT Clause (Transact-SQL).
OD table_source
Określa dodatkową klauzulę FROM. To rozszerzenie Transact-SQL delete umożliwia określenie danych z <table_source> i usunięcie odpowiednich wierszy z tabeli w pierwszej klauzuli FROM.
To rozszerzenie, określając sprzężenie, można użyć zamiast podzapytania w klauzuli WHERE, aby zidentyfikować wiersze do usunięcia.
Aby uzyskać więcej informacji, zobacz FROM (Transact-SQL).
WHERE
Określa warunki używane do ograniczenia liczby usuniętych wierszy. Jeśli klauzula WHERE nie jest podana, funkcja DELETE usuwa wszystkie wiersze z tabeli.
Istnieją dwie formy operacji usuwania na podstawie tego, co zostało określone w klauzuli WHERE:
Przeszukane usunięcia określają warunek wyszukiwania, aby zakwalifikować wiersze do usunięcia. Na przykład WHERE column_name = wartość.
Pozycjonowane usunięcia używają klauzuli CURRENT OF, aby określić kursor. Operacja usuwania występuje w bieżącej pozycji kursora. Może to być dokładniejsze niż przeszukana instrukcja DELETE, która używa klauzuli WHERE search_condition w celu zakwalifikowania wierszy do usunięcia. Przeszukana instrukcja DELETE usuwa wiele wierszy, jeśli warunek wyszukiwania nie identyfikuje unikatowo jednego wiersza.
<search_condition>
Określa warunki ograniczające usuwanie wierszy. Nie ma limitu liczby predykatów, które można uwzględnić w warunku wyszukiwania. Aby uzyskać więcej informacji, zobacz Warunek wyszukiwania (Transact-SQL).
AKTUALNY
Określa, że usuwanie jest wykonywane w bieżącej pozycji określonego kursora.
GLOBAL
Określa, że cursor_name odnosi się do kursora globalnego.
cursor_name
To nazwa otwartego kursora, z którego jest pobierany. Jeśli istnieje zarówno kursor globalny, jak i lokalny o nazwie cursor_name , ten argument odwołuje się do kursora globalnego, jeśli jest określony globalny; w przeciwnym razie odwołuje się do kursora lokalnego. Kursor musi zezwalać na aktualizacje.
cursor_variable_name
Nazwa zmiennej kursora. Zmienna kursora musi odwoływać się do kursora, który zezwala na aktualizacje.
OPCJA (<query_hint> [ ,... n] )
Słowa kluczowe wskazujące, które wskazówki optymalizatora są używane do dostosowywania sposobu przetwarzania instrukcji przez aparat bazy danych. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące zapytań (Transact-SQL).
Najlepsze praktyki
Aby usunąć wszystkie wiersze w tabeli, użyj polecenia TRUNCATE TABLE.
TRUNCATE TABLE jest szybszy niż DELETE i używa mniejszej liczby zasobów dziennika systemu i transakcji.
TRUNCATE TABLE na przykład tabela nie może uczestniczyć w replikacji. Aby uzyskać więcej informacji, zobacz TRUNCATE TABLE (Transact-SQL)
Użyj funkcji , @@ROWCOUNT aby zwrócić liczbę usuniętych wierszy do aplikacji klienckiej. Aby uzyskać więcej informacji, zobacz @@ROWCOUNT (Transact-SQL).
Obsługa błędów
Obsługę błędów dla instrukcji DELETE można zaimplementować, określając instrukcję TRY...CATCH w konstrukcji.
Instrukcja DELETE może zakończyć się niepowodzeniem, jeśli narusza wyzwalacz lub próbuje usunąć wiersz przywoływane przez dane w innej tabeli z ograniczeniem FOREIGN KEY .
DELETE Jeśli usunięcie wielu wierszy i jeden z usuniętych wierszy narusza wyzwalacz lub ograniczenie, instrukcja zostanie anulowana, zwracany jest błąd i nie są usuwane żadne wiersze.
Gdy instrukcja DELETE napotka błąd arytmetyczny (przepełnienie, dzielenie przez zero lub błąd domeny) występujący podczas obliczania wyrażeń, aparat bazy danych obsługuje te błędy tak, jakby SET ARITHABORT był ustawiony na włączone. Pozostała część partii jest anulowana i zwracany jest komunikat o błędzie.
Interoperability
Funkcja DELETE może być używana w treści funkcji zdefiniowanej przez użytkownika, jeśli zmodyfikowany obiekt jest zmienną tabeli.
Usunięcie wiersza zawierającego kolumnę FILESTREAM powoduje również usunięcie jego podstawowych plików systemu plików. Pliki bazowe są usuwane przez moduł odśmiecający element FILESTREAM. Aby uzyskać więcej informacji, zobacz Access FILESTREAM Data with Transact-SQL (Uzyskiwanie dostępu do danych FILESTREAM za pomocą języka Transact-SQL).
Klauzuli FROM nie można określić w instrukcji DELETE, która odwołuje się bezpośrednio lub pośrednio do widoku z wyzwalaczem zdefiniowanym INSTEAD OF na nim. Aby uzyskać więcej informacji o wyzwalaczach zamiast wyzwalaczy, zobacz CREATE TRIGGER (Transact-SQL).
Obecnie nie można określić klauzuli FROM w instrukcji DELETE w magazynie w usłudze Microsoft Fabric.
Ograniczenia i ograniczenia
W przypadku TOP użycia z elementem DELETE, przywoływani wiersze nie są rozmieszczane w żadnej kolejności, a klauzula ORDER BY nie może być bezpośrednio określona w tej instrukcji. Jeśli musisz użyć funkcji TOP, aby usunąć wiersze w znaczącej kolejności chronologicznej, należy użyć TOP razem z klauzulą ORDER BY w instrukcji subselect. Zobacz sekcję Przykłady w tym temacie.
TOP nie można używać w instrukcji DELETE względem widoków partycjonowanych.
Zachowanie blokujące
Domyślnie DELETE instrukcja zawsze uzyskuje wyłączną blokadę intencji (IX) na obiekcie tabeli i strony, które modyfikuje, wyłączną blokadę (X) na zmodyfikowanych wierszach i przechowuje te blokady do momentu zakończenia transakcji.
W przypadku blokady wykluczania intencji (IX) żadna inna transakcja nie może modyfikować tego samego zestawu danych; operacje odczytu mogą odbywać się tylko przy użyciu wskazówki NOLOCK lub odczytu niezatwierdzonego poziomu izolacji. Można określić wskazówki dotyczące tabeli, aby zastąpić to domyślne zachowanie przez czas trwania instrukcji DELETE, określając inną metodę blokowania, jednak zalecamy, aby wskazówki były używane tylko w ostateczności przez doświadczonych deweloperów i administratorów bazy danych. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące tabel (Transact-SQL).
Gdy wiersze są usuwane ze sterta, aparat bazy danych może używać blokady wiersza lub strony dla operacji. W związku z tym strony wykonane przez operację usuwania pozostają przydzielone do sterta. Jeśli przydział pustych stron nie zostanie cofnięty, skojarzone miejsce nie może być ponownie używane przez inne obiekty w bazie danych.
Aby usunąć wiersze na stosie i cofnąć przydział stron, użyj jednej z następujących metod.
TABLOCKOkreśl wskazówkę w instrukcjiDELETE.TABLOCKUżycie wskazówek powoduje, że operacja usuwania powoduje zablokowanie IX obiektu zamiast blokady wiersza lub strony. Dzięki temu można cofnąć przydział stron. Aby uzyskać więcej informacji na tematTABLOCKwskazówki, zobacz Wskazówki dotyczące tabel (Transact-SQL).Użyj
TRUNCATE TABLEpolecenia , jeśli wszystkie wiersze mają zostać usunięte z tabeli.Utwórz indeks klastrowany na stercie przed usunięciem wierszy. Indeks klastrowany można usunąć po usunięciu wierszy. Ta metoda jest bardziej czasochłonna niż poprzednie metody i używa więcej zasobów tymczasowych.
Note
Puste strony można usuwać z sterty w dowolnym momencie przy użyciu instrukcji ALTER TABLE <table_name> REBUILD .
Jeśli włączono zoptymalizowane blokowanie, niektóre aspekty blokowania zachowania w celu DELETE zmiany. Na przykład blokady wyłącznych (X) nie są przechowywane do momentu zakończenia transakcji. Aby uzyskać więcej informacji, zobacz Zoptymalizowane blokowanie.
Zachowanie logowania
Instrukcja DELETE jest zawsze w pełni rejestrowana.
Zabezpieczenia
Permissions
DELETE uprawnienia są wymagane w tabeli docelowej.
SELECT uprawnienia są również wymagane, jeśli instrukcja zawiera klauzulę WHERE.
Uprawnienia DELETE są domyślne dla członków stałej roli serwera, sysadmin ról stałej db_owner bazy danych i db_datawriter stałych ról bazy danych oraz właściciela tabeli.
sysadminCzłonkowie ról , db_owneri db_securityadmin oraz właściciel tabeli mogą przenosić uprawnienia do innych użytkowników.
Examples
| Category | Polecane elementy składni |
|---|---|
| Podstawowa składnia | DELETE |
| Ograniczanie usuniętych wierszy | GDZIE * FROM * kursor * |
| Usuwanie wierszy z tabeli zdalnej | Połączony serwer * funkcja zestawu wierszy OPENQUERY * funkcja zestawu wierszy OPENDATASOURCE |
| Przechwytywanie wyników instrukcji DELETE | Klauzula OUTPUT |
Podstawowa składnia
Przykłady w tej sekcji przedstawiają podstawowe funkcje instrukcji DELETE przy użyciu minimalnej wymaganej składni.
A. Używanie klauzuli DELETE bez klauzuli WHERE
Poniższy przykład usuwa wszystkie wiersze z tabeli SalesPersonQuotaHistory w bazie danych AdventureWorks2025, ponieważ klauzula WHERE nie jest używana do ograniczenia liczby usuniętych wierszy.
DELETE FROM Sales.SalesPersonQuotaHistory;
GO
Ograniczanie usuniętych wierszy
Przykłady w tej sekcji pokazują, jak ograniczyć liczbę wierszy, które zostaną usunięte.
B. Używanie klauzuli WHERE do usuwania zestawu wierszy
Poniższy przykład usuwa wszystkie wiersze z tabeli ProductCostHistory w bazie danych AdventureWorks2025, w których wartość w kolumnie StandardCost jest większa niż 1000.00.
DELETE FROM Production.ProductCostHistory
WHERE StandardCost > 1000.00;
GO
W poniższym przykładzie przedstawiono bardziej złożoną klauzulę WHERE. Klauzula WHERE definiuje dwa warunki, które należy spełnić, aby określić wiersze do usunięcia. Wartość w kolumnie StandardCost musi zawierać się między 12.00 i 14.00 a wartość w kolumnie SellEndDate musi mieć wartość null. Przykład wyświetla również wartość z funkcji @@ROWCOUNT , aby zwrócić liczbę usuniętych wierszy.
DELETE Production.ProductCostHistory
WHERE StandardCost BETWEEN 12.00 AND 14.00
AND EndDate IS NULL;
PRINT 'Number of rows deleted is ' + CAST(@@ROWCOUNT as char(3));
C. Używanie kursora do określenia wiersza do usunięcia
Poniższy przykład usuwa pojedynczy wiersz z tabeli EmployeePayHistory w bazie danych AdventureWorks2025 za pomocą kursora o nazwie complex_cursor. Operacja usuwania wpływa tylko na pojedynczy wiersz aktualnie pobierany z kursora.
DECLARE complex_cursor CURSOR FOR
SELECT a.BusinessEntityID
FROM HumanResources.EmployeePayHistory AS a
WHERE RateChangeDate <>
(SELECT MAX(RateChangeDate)
FROM HumanResources.EmployeePayHistory AS b
WHERE a.BusinessEntityID = b.BusinessEntityID) ;
OPEN complex_cursor;
FETCH FROM complex_cursor;
DELETE FROM HumanResources.EmployeePayHistory
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO
D. Używanie sprzężeń i podzapytania do danych w jednej tabeli w celu usunięcia wierszy w innej tabeli
W poniższych przykładach pokazano dwa sposoby usuwania wierszy w jednej tabeli na podstawie danych w innej tabeli. W obu przypadkach wiersze z tabeli SalesPersonQuotaHistory w bazie AdventureWorks2025 są usuwane na podstawie sprzedaży od początku roku zapisanej w tabeli SalesPerson .
DELETE Pierwsza instrukcja przedstawia rozwiązanie podzapytania zgodne z normą ISO, a druga DELETE instrukcja pokazuje rozszerzenie Transact-SQL FROM, aby połączyć dwie tabele.
-- SQL-2003 Standard subquery
DELETE FROM Sales.SalesPersonQuotaHistory
WHERE BusinessEntityID IN
(SELECT BusinessEntityID
FROM Sales.SalesPerson
WHERE SalesYTD > 2500000.00);
GO
-- Transact-SQL extension
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
-- No need to mention target table more than once.
DELETE spqh
FROM
Sales.SalesPersonQuotaHistory AS spqh
INNER JOIN Sales.SalesPerson AS sp
ON spqh.BusinessEntityID = sp.BusinessEntityID
WHERE sp.SalesYTD > 2500000.00;
E. Używanie funkcji TOP w celu ograniczenia liczby usuniętych wierszy
Gdy klauzula TOP (n) jest używana z funkcją DELETE, operacja usuwania jest wykonywana na losowym wyborze n wierszy. Poniższy przykład usuwa 20 losowe wiersze z tabeli PurchaseOrderDetail w bazie AdventureWorks2025, które mają terminy wcześniejsze niż 1 lipca 2006 roku.
DELETE TOP (20)
FROM Purchasing.PurchaseOrderDetail
WHERE DueDate < '20020701';
GO
Jeśli musisz użyć funkcji TOP, aby usunąć wiersze w znaczącej kolejności chronologicznej, musisz użyć funkcji TOP wraz z instrukcją ORDER BY w instrukcji subselect. Poniższe zapytanie usuwa 10 wierszy tabeli PurchaseOrderDetail, które mają najwcześniejsze daty ukończenia. Aby upewnić się, że usunięto tylko 10 wierszy, kolumna określona w instrukcji subselect (PurchaseOrderID) jest kluczem podstawowym tabeli. Użycie kolumny innej niż klucz w instrukcji subselect może spowodować usunięcie więcej niż 10 wierszy, jeśli określona kolumna zawiera zduplikowane wartości.
DELETE FROM Purchasing.PurchaseOrderDetail
WHERE PurchaseOrderDetailID IN
(SELECT TOP 10 PurchaseOrderDetailID
FROM Purchasing.PurchaseOrderDetail
ORDER BY DueDate ASC);
GO
Usuwanie wierszy z tabeli zdalnej
Przykłady w tej sekcji pokazują, jak usunąć wiersze z tabeli zdalnej przy użyciu serwera połączonego lub funkcji zestawu wierszy w celu odwołania się do tabeli zdalnej. Tabela zdalna istnieje na innym serwerze lub wystąpieniu programu SQL Server.
Dotyczy: SQL Server 2008 (10.0.x) i nowszych.
F. Usuwanie danych z tabeli zdalnej przy użyciu serwera połączonego
Poniższy przykład usuwa wiersze z tabeli zdalnej. Przykład rozpoczyna się od utworzenia linku do zdalnego źródła danych przy użyciu sp_addlinkedserver. Nazwa serwera MyLinkServerpołączonego , jest następnie określona jako część nazwy obiektu czteroczęściowego w obiekcie formularza server.catalog.schema.object.
USE master;
GO
-- Create a link to the remote data source.
-- Specify a valid server name for @datasrc as 'server_name' or 'server_name\instance_name'.
EXEC sp_addlinkedserver @server = N'MyLinkServer',
@srvproduct = N' ',
@provider = N'SQLNCLI',
@datasrc = N'server_name',
@catalog = N'AdventureWorks2022';
GO
-- Specify the remote data source using a four-part name
-- in the form linked_server.catalog.schema.object.
DELETE MyLinkServer.AdventureWorks2022.HumanResources.Department
WHERE DepartmentID > 16;
GO
G. Usuwanie danych z tabeli zdalnej przy użyciu funkcji OPENQUERY
Poniższy przykład usuwa wiersze z tabeli zdalnej, określając funkcję zestawu wierszy OPENQUERY . W tym przykładzie użyto nazwy serwera połączonego utworzonego w poprzednim przykładzie.
DELETE OPENQUERY (MyLinkServer, 'SELECT Name, GroupName
FROM AdventureWorks2022.HumanResources.Department
WHERE DepartmentID = 18');
GO
H. Usuwanie danych z tabeli zdalnej przy użyciu funkcji OPENDATASOURCE
Poniższy przykład usuwa wiersze z tabeli zdalnej, określając funkcję zestawu wierszy OPENDATASOURCE . Określ prawidłową nazwę serwera dla źródła danych przy użyciu formatu server_name lub server_name\instance_name.
DELETE FROM OPENDATASOURCE('SQLNCLI',
'Data Source= <server_name>; Integrated Security=SSPI')
.AdventureWorks2022.HumanResources.Department
WHERE DepartmentID = 17;
Przechwytywanie wyników instrukcji DELETE
I. Używanie funkcji DELETE z klauzulą OUTPUT
Poniższy przykład pokazuje, jak zapisać wyniki zawołania DELETE do zmiennej tabelowej w bazie AdventureWorks2025.
DELETE Sales.ShoppingCartItem
OUTPUT DELETED.*
WHERE ShoppingCartID = 20621;
--Verify the rows in the table matching the WHERE clause have been deleted.
SELECT COUNT(*) AS [Rows in Table]
FROM Sales.ShoppingCartItem
WHERE ShoppingCartID = 20621;
GO
J. Używanie funkcji OUTPUT z <from_table_name> w instrukcji DELETE
Poniższy przykład usuwa wiersze w tabeli ProductProductPhoto bazy AdventureWorks2025 na podstawie kryteriów wyszukiwania określonych w klauzuli FROM oświadczenia DELETE . Klauzula OUTPUT zwraca kolumny z tabeli, która jest usuwana, DELETED.ProductID, DELETED.ProductPhotoIDi z Product tabeli. Jest on używany w klauzuli FROM , aby określić wiersze do usunięcia.
DECLARE @MyTableVar table (
ProductID int NOT NULL,
ProductName nvarchar(50)NOT NULL,
ProductModelID int NOT NULL,
PhotoID int NOT NULL);
DELETE Production.ProductProductPhoto
OUTPUT DELETED.ProductID,
p.Name,
p.ProductModelID,
DELETED.ProductPhotoID
INTO @MyTableVar
FROM Production.ProductProductPhoto AS ph
JOIN Production.Product as p
ON ph.ProductID = p.ProductID
WHERE p.ProductModelID BETWEEN 120 and 130;
--Display the results of the table variable.
SELECT ProductID, ProductName, ProductModelID, PhotoID
FROM @MyTableVar
ORDER BY ProductModelID;
GO
Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)
K. Usuwanie wszystkich wierszy z tabeli
Poniższy przykład usuwa wszystkie wiersze z tabeli, Table1 ponieważ klauzula WHERE nie jest używana do ograniczenia liczby usuniętych wierszy.
DELETE FROM Table1;
L. USUWANIE zestawu wierszy z tabeli
Poniższy przykład usuwa wszystkie wiersze z Table1 tabeli, które mają wartość większą niż 1000,00 w kolumnie StandardCost .
DELETE FROM Table1
WHERE StandardCost > 1000.00;
M. Używanie instrukcji LABEL z instrukcją DELETE
W poniższym przykładzie użyto etykiety z instrukcją DELETE.
DELETE FROM Table1
OPTION ( LABEL = N'label1' );
N. Używanie etykiety i wskazówki zapytania z instrukcją DELETE
To zapytanie przedstawia podstawową składnię użycia wskazówki sprzężenia zapytania z instrukcją DELETE. Aby uzyskać więcej informacji na temat wskazówek sprzężenia i sposobu używania klauzuli OPTION, zobacz OPTION Clause (Transact-SQL).
-- Uses AdventureWorks
DELETE FROM dbo.FactInternetSales
WHERE ProductKey IN (
SELECT T1.ProductKey FROM dbo.DimProduct T1
JOIN dbo.DimProductSubcategory T2
ON T1.ProductSubcategoryKey = T2.ProductSubcategoryKey
WHERE T2.EnglishProductSubcategoryName = 'Road Bikes' )
OPTION ( LABEL = N'CustomJoin', HASH JOIN ) ;
O. Usuwanie przy użyciu klauzuli WHERE
To zapytanie pokazuje, jak usunąć przy użyciu klauzuli WHERE i nie używać klauzuli FROM.
DELETE tableA WHERE EXISTS (
SELECT TOP 1 FROM tableB tb WHERE tb.col1 = tableA.col1
)
P. Usuń na podstawie wyniku połączenia z inną tabelą
W tym przykładzie pokazano, jak usunąć z tabeli na podstawie wyniku łączenia z inną tabelą.
CREATE TABLE dbo.Table1
(ColA int NOT NULL, ColB decimal(10,3) NOT NULL);
GO
CREATE TABLE dbo.Table2
(ColA int PRIMARY KEY NOT NULL, ColB decimal(10,3) NOT NULL);
GO
INSERT INTO dbo.Table1 VALUES(1, 10.0), (1, 20.0);
INSERT INTO dbo.Table2 VALUES(1, 0.0);
GO
DELETE dbo.Table2
FROM dbo.Table2
INNER JOIN dbo.Table1
ON (dbo.Table2.ColA = dbo.Table1.ColA)
WHERE dbo.Table2.ColA = 1;
Zobacz też
UTWÓRZ TRIGGER (Transact-SQL)
WSTAW (Transact-SQL)
WYBIERZ (Transact-SQL)
STÓŁ OBCIĘĆ (Transact-SQL)
AKTUALIZACJA (Transact-SQL)
Z common_table_expression (Transact-SQL)
@@ROWCOUNT (Transact-SQL)