Sdílet prostřednictvím


DELETE (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Warehouse v Microsoft Fabricdatabázi SQL v Microsoft Fabric

Odebere jeden nebo více řádků z tabulky nebo zobrazení v SQL Serveru.

Transact-SQL konvence syntaxe

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 ]  ) ]  
[; ]  

Argumenty

WITH <common_table_expression>
Určuje dočasnou pojmenovanou sadu výsledků označovanou také jako běžný výraz tabulky definovanou v rámci oboru příkazu DELETE. Sada výsledků je odvozena z příkazu SELECT.

Běžné výrazy tabulky lze použít také s příkazy SELECT, INSERT, UPDATE a CREATE VIEW. Další informace najdete v tématu WITH common_table_expression (Transact-SQL).

TOP ( výraz) [ PERCENT ]
Určuje počet nebo procento náhodných řádků, které budou odstraněny. výraz může být číslo nebo procento řádků. Řádky odkazované ve výrazu TOP použitém s příkazem INSERT, UPDATE nebo DELETE nejsou uspořádány v žádném pořadí. Další informace naleznete v tématu TOP (Transact-SQL).

OD
Volitelné klíčové slovo, které lze použít mezi klíčovým slovem DELETE a cílovým table_or_view_namenebo rowset_function_limited.

table_alias
Alias zadaný v klauzuli FROM table_source představující tabulku nebo zobrazení, ze kterého mají být řádky odstraněny.

server_name
platí pro: SQL Server 2008 (10.0.x) a novější.

Název serveru (pomocí názvu propojeného serveru nebo OPENDATASOURCE fungovat jako název serveru), na kterém se nachází tabulka nebo zobrazení. Pokud je zadán server_name, database_name a schema_name jsou povinné.

database_name
Název databáze.

schema_name
Název schématu, do kterého patří tabulka nebo zobrazení.

table_or_view_name
Název tabulky nebo zobrazení, ze kterého mají být řádky odebrány.

Proměnnou tabulky v rámci oboru lze také použít jako zdroj tabulky v příkazu DELETE.

Zobrazení, na které odkazuje table_or_view_name, musí být aktualizovatelné a odkazovat na přesně jednu základní tabulku v klauzuli FROM definice zobrazení. Další informace o aktualizovatelných zobrazeních naleznete v tématu CREATE VIEW (Transact-SQL).

rowset_function_limited
platí pro: SQL Server 2008 (10.0.x) a novější.

Funkce OPENQUERY nebo OPENROWSET, která podléhá možnostem zprostředkovatele.

WITH (<table_hint_limited> [... n] )
Určuje jeden nebo více tipů pro tabulku, které jsou povolené pro cílovou tabulku. Klíčové slovo WITH a závorky jsou povinné. NOLOCK a READUNCOMMITTED nejsou povoleny. Další informace o nápovědě k tabulce naleznete v tématu Rady tabulky (Transact-SQL).

<OUTPUT_Clause>
Vrátí odstraněné řádky nebo výrazy založené na nich jako součást operace DELETE. Klauzule OUTPUT není podporována v žádných příkazech DML, které cílí na zobrazení nebo vzdálené tabulky. Další informace o argumentech a chování této klauzule naleznete v tématu OUTPUT – klauzule (Transact-SQL).

FROM table_source
Určuje další klauzuli FROM. Toto rozšíření Transact-SQL delete umožňuje zadat data z <table_source> a odstranit odpovídající řádky z tabulky v první klauzuli FROM.

Toto rozšíření, které určuje spojení, lze místo poddotazu v klauzuli WHERE použít k identifikaci řádků, které se mají odebrat.

Další informace najdete v tématu FROM (Transact-SQL).

KDE
Určuje podmínky použité k omezení počtu odstraněných řádků. Pokud klauzule WHERE není zadána, delete odebere všechny řádky z tabulky.

Existují dvě formy operací odstranění na základě toho, co je zadáno v klauzuli WHERE:

  • Prohledané odstranění určují podmínku hledání, která opravní řádky k odstranění. Například hodnota WHERE column_name = .

  • Poziční odstranění používá klauzuli CURRENT OF k určení kurzoru. Operace odstranění probíhá na aktuální pozici kurzoru. To může být přesnější než hledaný příkaz DELETE, který používá klauzuli WHERE search_condition kvalifikovat řádky, které se mají odstranit. Hledaný příkaz DELETE odstraní více řádků, pokud podmínka hledání jednoznačně neidentifikuje jeden řádek.

<search_condition>
Určuje omezující podmínky pro odstranění řádků. Počet predikátů, které lze zahrnout do podmínky hledání, není nijak omezený. Další informace najdete v tématu podmínky hledání (Transact-SQL).

AKTUÁLNÍ
Určuje, že delete se provádí na aktuální pozici zadaného kurzoru.

GLOBÁLNÍ
Určuje, že cursor_name odkazuje na globální kurzor.

cursor_name
Je název otevřeného kurzoru, ze kterého se načítá. Pokud existuje globální i místní kurzor s názvem cursor_name existuje, odkazuje tento argument na globální kurzor, pokud je zadána funkce GLOBAL; v opačném případě odkazuje na místní kurzor. Kurzor musí povolit aktualizace.

cursor_variable_name
Název proměnné kurzoru. Proměnná kurzoru musí odkazovat na kurzor, který umožňuje aktualizace.

OPTION (<query_hint> [ ,... n] )
Klíčová slova označující, které rady optimalizátoru se používají k přizpůsobení způsobu, jakým databázový stroj zpracovává příkaz. Další informace najdete v tématu Nápovědy k dotazům (Transact-SQL).

Osvědčené postupy

Pokud chcete odstranit všechny řádky v tabulce, použijte TRUNCATE TABLE. TRUNCATE TABLE je rychlejší než DELETE a používá méně prostředků systémového a transakčního protokolu. TRUNCATE TABLE má omezení, například tabulka se nemůže účastnit replikace. Další informace najdete v tématu TRUNCATE TABLE (Transact-SQL)

Pomocí funkce @@ROWCOUNT vrátíte do klientské aplikace počet odstraněných řádků. Další informace naleznete v tématu @@ROWCOUNT (Transact-SQL).

Zpracování chyb

Zpracování chyb pro příkaz DELETE můžete implementovat zadáním příkazu v TRY...CATCH konstruktoru.

Příkaz DELETE může selhat, pokud porušuje trigger nebo se pokusí odebrat řádek odkazovaný daty v jiné tabulce s omezením FOREIGN KEY. Pokud DELETE odebere více řádků a některý z odebraných řádků porušuje aktivační událost nebo omezení, příkaz se zruší, vrátí se chyba a neodebere se žádné řádky.

Když příkaz DELETE při vyhodnocování výrazu narazí na aritmetickou chybu (přetečení, dělení nulou nebo chybou domény), databázový stroj tyto chyby zpracuje, jako by byl nastavený SET ARITHABORT ZAPNUTO. Zbytek dávky se zruší a vrátí se chybová zpráva.

Interoperabilita

DELETE lze použít v těle uživatelem definované funkce, pokud je objekt změněn proměnnou tabulky.

Když odstraníte řádek obsahující sloupec FILESTREAM, odstraníte také jeho základní soubory systému souborů. Základní soubory se odeberou uvolňováním paměti FILESTREAM. Další informace naleznete v tématu Access FILESTREAM Data s jazykem Transact-SQL.

Klauzuli FROM nelze zadat v příkazu DELETE, který odkazuje přímo nebo nepřímo na zobrazení s INSTEAD OF triggerem definovaným v něm. Další informace o triggerech MÍSTO triggerů najdete v tématu CREATE TRIGGER (Transact-SQL).

V současné době nelze klauzuli FROM zadat v příkazu DELETE ve skladu v Microsoft Fabric.

Omezení a omezení

Při použití TOP s DELETEnejsou odkazované řádky uspořádány v žádném pořadí a klauzule ORDER BY nelze přímo zadat v tomto příkazu. Pokud potřebujete pomocí funkce TOP odstranit řádky ve smysluplné chronologickém pořadí, musíte použít TOP společně s klauzulí ORDER BY v příkazu subselect. Podívejte se na část Příklady, která následuje v tomto tématu.

TOP nelze použít v příkazu DELETE pro dělené zobrazení.

Chování uzamčení

Ve výchozím nastavení příkaz DELETE vždy získá zámek záměru (IX) objektu tabulky a stránky, které upraví, výhradní (X) uzamkne na řádcích, které upraví, a uchovává tyto zámky, dokud transakce nebude dokončena.

S výhradním záměrem (IX) zámek, žádné jiné transakce nemohou upravovat stejnou sadu dat; Operace čtení se můžou provádět pouze s použitím nápovědy NOLOCK nebo s nekomprimovanými úrovněmi izolace. Nápovědy k tabulce můžete zadat tak, aby po dobu trvání příkazu DELETE přepsaly toto výchozí chování zadáním jiné metody uzamčení. Doporučujeme však, aby se rady používaly pouze jako poslední možnost zkušenými vývojáři a správci databází. Další informace naleznete v tématu Nápovědy k tabulce (Transact-SQL).

Když se řádky odstraní z haldy, databázový stroj může pro operaci použít uzamčení řádku nebo stránky. V důsledku toho zůstanou stránky vyprázdněné operací odstranění přiděleny haldě. Pokud nejsou uvolněny prázdné stránky, přidružené místo nelze znovu použít jinými objekty v databázi.

Pokud chcete odstranit řádky v haldě a uvolnit stránky, použijte jednu z následujících metod.

  • V příkazu DELETE zadejte TABLOCK nápovědu. Použití TABLOCK nápovědy způsobí, že operace odstranění provede zámek IX na objektu místo řádku nebo zámku stránky. Tím umožníte uvolnění stránek. Další informace o nápovědě k TABLOCK naleznete v tématu Nápovědy k tabulce (Transact-SQL).

  • Pokud chcete odstranit všechny řádky z tabulky, použijte TRUNCATE TABLE.

  • Před odstraněním řádků vytvořte na haldě clusterovaný index. Clusterovaný index můžete po odstranění řádků odstranit. Tato metoda je časově náročnější než předchozí metody a používá více dočasných prostředků.

Poznámka

Prázdné stránky lze kdykoli odebrat z haldy pomocí příkazu ALTER TABLE <table_name> REBUILD.

Pokud je povolené optimalizované uzamčení, některé aspekty chování uzamčení DELETE se změní. Například exkluzivní zámky (X) se neudržují, dokud se transakce nedokončí. Další informace naleznete v tématu Optimalizované uzamčení.

Chování protokolování

Příkaz DELETE je vždy plně protokolován.

Bezpečnost

Dovolení

DELETE oprávnění jsou vyžadována v cílové tabulce. SELECT oprávnění jsou vyžadována také v případě, že příkaz obsahuje klauzuli WHERE.

Oprávnění DELETE jsou výchozí pro členy sysadmin pevné role serveru, db_owner a db_datawriter pevné databázové role a vlastníka tabulky. Členové rolí sysadmin, db_ownera db_securityadmin a vlastník tabulky může přenést oprávnění jiným uživatelům.

Příklady

Kategorie Doporučené prvky syntaxe
základní syntaxe VYMAZAT
omezení odstraněných řádků WHERE * FROM * kurzor * *
Odstranění řádků ze vzdálené tabulky Propojený server * Funkce sady řádků OPENQUERY * Funkce sady řádků OPENDATASOURCE
Zachycení výsledků příkazu DELETE Klauzule OUTPUT

Základní syntaxe

Příklady v této části ukazují základní funkce příkazu DELETE pomocí minimální požadované syntaxe.

A. Použití delete bez klauzule WHERE

Následující příklad odstraní všechny řádky z tabulky SalesPersonQuotaHistory v databázi AdventureWorks2022, protože klauzule WHERE se nepoužívá k omezení počtu odstraněných řádků.

DELETE FROM Sales.SalesPersonQuotaHistory;  
GO  

Omezení odstraněných řádků

Příklady v této části ukazují, jak omezit počet řádků, které budou odstraněny.

B. Použití klauzule WHERE k odstranění sady řádků

Následující příklad odstraní všechny řádky z tabulky ProductCostHistory v databázi AdventureWorks2022, ve které je hodnota ve sloupci StandardCost větší než 1000.00.

DELETE FROM Production.ProductCostHistory  
WHERE StandardCost > 1000.00;  
GO  

Následující příklad ukazuje složitější klauzuli WHERE. Klauzule WHERE definuje dvě podmínky, které musí být splněny, aby bylo možné určit řádky k odstranění. Hodnota ve sloupci StandardCost musí být mezi 12.00 a 14.00 a hodnota ve sloupci SellEndDate musí být null. Příklad také vytiskne hodnotu z funkce @@ROWCOUNT, která vrátí počet odstraněných řádků.

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. Určení řádku k odstranění pomocí kurzoru

Následující příklad odstraní jeden řádek z tabulky EmployeePayHistory v databázi AdventureWorks2022 pomocí kurzoru s názvem complex_cursor. Operace odstranění ovlivňuje pouze jeden řádek, který se právě načítá z kurzoru.

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. Použití spojení a poddotazů k datům v jedné tabulce k odstranění řádků v jiné tabulce

Následující příklady ukazují dva způsoby odstranění řádků v jedné tabulce na základě dat v jiné tabulce. V obou příkladech se řádky z tabulky SalesPersonQuotaHistory v databázi AdventureWorks2022 odstraní na základě prodeje od roku do data uloženého v tabulce SalesPerson. První příkaz DELETE ukazuje řešení poddotazů kompatibilní se standardem ISO a druhý příkaz DELETE ukazuje rozšíření Transact-SQL FROM pro spojení obou tabulek.

-- 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. Omezení počtu odstraněných řádků pomocí funkce TOP

Při použití klauzule TOP (n) s delete se operace delete provádí s náhodným výběrem n počtu řádků. Následující příklad odstraní 20 náhodné řádky z tabulky PurchaseOrderDetail v databázi AdventureWorks2022 s termíny splnění, které jsou starší než 1. července 2006.

DELETE TOP (20)   
FROM Purchasing.PurchaseOrderDetail  
WHERE DueDate < '20020701';  
GO  

Pokud k odstranění řádků ve smysluplné chronologickém pořadí potřebujete použít top společně s order BY v příkazu dílčího výběru. Následující dotaz odstraní 10 řádků tabulky PurchaseOrderDetail, které mají nejstarší termíny splnění. Pokud chcete zajistit, aby se odstranilo pouze 10 řádků, je sloupec zadaný v příkazu dílčího výběru (PurchaseOrderID) primárním klíčem tabulky. Použití jiného sloupce v příkazu dílčího výběru může vést k odstranění více než 10 řádků, pokud zadaný sloupec obsahuje duplicitní hodnoty.

DELETE FROM Purchasing.PurchaseOrderDetail  
WHERE PurchaseOrderDetailID IN  
   (SELECT TOP 10 PurchaseOrderDetailID   
    FROM Purchasing.PurchaseOrderDetail   
    ORDER BY DueDate ASC);  
GO  

Odstranění řádků ze vzdálené tabulky

Příklady v této části ukazují, jak odstranit řádky ze vzdálené tabulky pomocí propojeného serveru nebo funkce sady řádků odkazovat na vzdálenou tabulku. Vzdálená tabulka existuje na jiném serveru nebo instanci SQL Serveru.

platí pro: SQL Server 2008 (10.0.x) a novější.

F. Odstranění dat ze vzdálené tabulky pomocí propojeného serveru

Následující příklad odstraní řádky ze vzdálené tabulky. Příklad začíná vytvořením propojení se vzdáleným zdrojem dat pomocí sp_addlinkedserver. Název propojeného serveru MyLinkServerje pak určen jako součást názvu objektu čtyřdílné ve formuláři 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. Odstranění dat ze vzdálené tabulky pomocí funkce OPENQUERY

Následující příklad odstraní řádky ze vzdálené tabulky zadáním OPENQUERY funkce sady řádků. V tomto příkladu se používá název propojeného serveru vytvořený v předchozím příkladu.

DELETE OPENQUERY (MyLinkServer, 'SELECT Name, GroupName 
FROM AdventureWorks2022.HumanResources.Department  
WHERE DepartmentID = 18');  
GO  

H. Odstranění dat ze vzdálené tabulky pomocí funkce OPENDATASOURCE

Následující příklad odstraní řádky ze vzdálené tabulky zadáním OPENDATASOURCE sadě řádků. Zadejte platný název serveru pro zdroj dat pomocí formátu server_name nebo server_name\instance_name.

DELETE FROM OPENDATASOURCE('SQLNCLI',  
    'Data Source= <server_name>; Integrated Security=SSPI')  
    .AdventureWorks2022.HumanResources.Department   
WHERE DepartmentID = 17;

Zaznamenání výsledků příkazu DELETE

Já. Použití delete s klauzulí OUTPUT

Následující příklad ukazuje, jak uložit výsledky příkazu DELETE do proměnné tabulky v databázi AdventureWorks2022.

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. Použití výstupu s <from_table_name> v příkazu DELETE

Následující příklad odstraní řádky v tabulce ProductProductPhoto v databázi AdventureWorks2022 na základě kritérií hledání definovaných v klauzuli FROM příkazu DELETE. Klauzule OUTPUT vrátí sloupce z tabulky, která se odstraňuje, DELETED.ProductID, DELETED.ProductPhotoIDa sloupce z tabulky Product. Používá se v klauzuli FROM k určení řádků, které se mají odstranit.

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  

Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

K. Odstranění všech řádků z tabulky

Následující příklad odstraní všechny řádky z tabulky Table1, protože klauzule WHERE se nepoužívá k omezení počtu odstraněných řádků.

DELETE FROM Table1;  

L. ODSTRANĚNÍ sady řádků z tabulky

Následující příklad odstraní všechny řádky z tabulky Table1, které mají hodnotu větší než 1000,00 ve sloupci StandardCost.

DELETE FROM Table1  
WHERE StandardCost > 1000.00;  

M. Použití LABEL s příkazem DELETE

Následující příklad používá popisek s příkazem DELETE.

DELETE FROM Table1  
OPTION ( LABEL = N'label1' );  
  

N. Použití popisku a nápovědy dotazu s příkazem DELETE

Tento dotaz zobrazuje základní syntaxi pro použití nápovědy ke spojení dotazu pomocí příkazu DELETE. Další informace o tipech spojení a o tom, jak použít klauzuli OPTION, naleznete v tématu OPTION – klauzule (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. Odstranění pomocí klauzule WHERE

Tento dotaz ukazuje, jak odstranit pomocí klauzule WHERE a ne pomocí klauzule FROM.

DELETE tableA WHERE EXISTS (
SELECT TOP 1 1 FROM tableB tb WHERE tb.col1 = tableA.col1
)

P. Odstranění na základě výsledku spojení s jinou tabulkou

Tento příklad ukazuje, jak odstranit z tabulky na základě výsledku spojení s jinou tabulkou.

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;  

Viz také

CREATE TRIGGER (Transact-SQL)
INSERT (Transact-SQL)
SELECT (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
UPDATE (Transact-SQL)
WITH common_table_expression (Transact-SQL)
@@ROWCOUNT (Transact-SQL)