Megosztás a következőn keresztül:


TÖRLÉS (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)Raktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Eltávolít egy vagy több sort egy táblából vagy nézetből az SQL Serveren.

Transact-SQL szintaxis konvenciói

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

A COMMON_TABLE_EXPRESSION <>
Megadja a DELETE utasítás hatókörében definiált ideiglenes elnevezett eredménykészletet, más néven közös táblakifejezést. Az eredményhalmaz egy SELECT utasításból származik.

Gyakori táblakifejezések a SELECT, INSERT, UPDATE és CREATE VIEW utasításokkal is használhatók. További információ: WITH common_table_expression (Transact-SQL).

TOP (kifejezés) [ SZÁZALÉK ]
A törölni kívánt véletlenszerű sorok számát vagy százalékát adja meg. kifejezés lehet a sorok száma vagy százaléka. Az INSERT, UPDATE vagy DELETE top kifejezésben hivatkozott sorok nincsenek rendezve semmilyen sorrendben. További információ: TOP (Transact-SQL).

FROM
Választható kulcsszó, amely a DELETE kulcsszó és a cél table_or_view_namevagy rowset_function_limitedközött használható.

table_alias
A FROM table_source záradékban megadott alias azt a táblát vagy nézetet jelöli, amelyből a sorokat törölni kell.

server_name
Az: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

Annak a kiszolgálónak a neve (csatolt kiszolgálónév vagy OPENDATASOURCE függvény kiszolgálónévként), amelyen a tábla vagy nézet található. Ha server_name van megadva, database_name és schema_name van szükség.

database_name
Az adatbázis neve.

schema_name
Annak a sémának a neve, amelyhez a tábla vagy nézet tartozik.

table_or_view_name
Annak a táblázatnak vagy nézetnek a neve, amelyből a sorokat el kell távolítani.

A táblaváltozó a hatókörében táblaforrásként is használható a DELETE utasításban.

A table_or_view_name által hivatkozott nézetnek frissíthetőnek kell lennie, és pontosan egy alaptáblára kell hivatkoznia a nézetdefiníció FROM záradékában. Az frissíthető nézetekről további információt CREATE VIEW (Transact-SQL)című témakörben talál.

rowset_function_limited
Az: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

A OPENQUERY vagy OPENROWSET függvényt, a szolgáltatói képességek függvényében.

A (<table_hint_limited> [... n] )
Egy vagy több, céltáblához engedélyezett táblamutatót ad meg. A WITH kulcsszó és a zárójelek megadása kötelező. A NOLOCK és a READUNCOMMITTED nem engedélyezett. További információ a táblázat tippjeiről: Table Hints (Transact-SQL).

<OUTPUT_Clause>
Törölt sorokat vagy kifejezéseket ad vissza a DELETE művelet részeként. A KIMENETI záradék nem támogatott a nézetekre vagy távoli táblákra vonatkozó DML-utasításokban. A záradék argumentumairól és viselkedéséről további információt OUTPUT záradék (Transact-SQL)című cikkben talál.

A table_source
Egy további FROM záradékot ad meg. Ez a Transact-SQL DELETE kiterjesztés lehetővé teszi a <table_source> adatainak megadását és a megfelelő sorok törlését a táblából az első FROM záradékban.

Ez az illesztést megjelölő bővítmény használható a WHERE záradékban lévő részkikérdezés helyett az eltávolítandó sorok azonosításához.

További információ: FROM (Transact-SQL).

WHERE
Megadja a törölt sorok számának korlátozásához használt feltételeket. Ha a WHERE záradék nincs megadva, a DELETE eltávolítja az összes sort a táblából.

A WHERE záradékban megadottak alapján a törlési műveleteknek két formája van:

  • A keresett törlések olyan keresési feltételt adnak meg, amely minősíti a törölni kívánt sorokat. Például a WHERE column_name = érték.

  • A pozícióban lévő törlések a CURRENT OF záradékot használják a kurzor megadásához. A törlési művelet a kurzor aktuális pozíciójában történik. Ez pontosabb lehet, mint a where search_condition záradékot használó kereshető DELETE utasítás, amely a törölni kívánt sorokat minősíti. A keresett DELETE utasítás több sort töröl, ha a keresési feltétel nem azonosít egyedileg egyetlen sort.

<search_condition>
Megadja a törölni kívánt sorok korlátozási feltételeit. A keresési feltételben szereplő predikátumok száma nincs korlátozva. További információ: Keresési feltétel (Transact-SQL).

JELENLEGI TERÜLET
Megadja, hogy a DELETE a megadott kurzor aktuális helyén legyen végrehajtva.

GLOBAL
Megadja, hogy cursor_name globális kurzorra hivatkozik.

cursor_name
Annak a nyitott kurzornak a neve, amelyből a beolvasás történik. Ha cursor_name nevű globális és helyi kurzor is létezik, ez az argumentum a globális kurzorra hivatkozik, ha a GLOBAL van megadva; ellenkező esetben a helyi kurzorra hivatkozik. A kurzornak engedélyeznie kell a frissítéseket.

cursor_variable_name
A kurzorváltozó neve. A kurzorváltozónak olyan kurzorra kell hivatkoznia, amely lehetővé teszi a frissítéseket.

OPCIÓ (<query_hint> [ ,... n] )
Kulcsszavak, amelyek jelzik, hogy mely optimalizáló tippeket használják az adatbázismotor által az utasítás folyamatának testreszabásához. További információ: lekérdezési tippek (Transact-SQL).

Ajánlott eljárások

A tábla összes sorának törléséhez használja a TRUNCATE TABLE. TRUNCATE TABLE gyorsabb, mint a DELETE, és kevesebb rendszer- és tranzakciónapló-erőforrást használ. TRUNCATE TABLE korlátozásokkal rendelkezik, például a tábla nem vehet részt a replikációban. További információ: TRUNCATE TABLE (Transact-SQL)

A @@ROWCOUNT függvénnyel adja vissza a törölt sorok számát az ügyfélalkalmazásnak. További információ: @@ROWCOUNT (Transact-SQL).

Hibakezelés

A DELETE utasítás hibakezelését úgy valósíthatja meg, hogy megadja az utasítást egy TRY...CATCH szerkezetben.

A DELETE utasítás meghiúsulhat, ha megsért egy eseményindítót, vagy egy másik táblában lévő adatok által hivatkozott sort próbál eltávolítani FOREIGN KEY korlátozással. Ha a DELETE több sort távolít el, és az eltávolított sorok bármelyike megsérti az eseményindítót vagy a kényszert, a rendszer megszakítja az utasítást, hibát ad vissza, és nem távolít el sorokat.

Ha a DELETE utasítás a kifejezés kiértékelése során aritmetikai hibát (túlcsordulás, nullával való osztás vagy tartományhiba) tapasztal, az adatbázismotor úgy kezeli ezeket a hibákat, mintha SET ARITHABORT be van állítva. A köteg többi része megszakítva, és hibaüzenet jelenik meg.

Interoperability

A DELETE egy felhasználó által definiált függvény törzsében használható, ha a módosított objektum táblaváltozó.

A FILESTREAM oszlopot tartalmazó sor törlésekor a mögöttes fájlrendszerfájlokat is törli. A mögöttes fájlokat a FILESTREAM szemétgyűjtő eltávolítja. További információ: FILESTREAM-adatok elérése Transact-SQLhasználatával.

A FROM záradék nem adható meg olyan DELETE utasításban, amely közvetlenül vagy közvetve hivatkozik egy INSTEAD OF eseményindítóval definiált nézetre. Az eseményindítók helyett további információkért lásd CREATE TRIGGER (Transact-SQL).

A FROM záradék jelenleg nem adható meg a Delete utasításban a Microsoft Fabric raktárában.

Korlátozások és korlátozások

Ha TOPDELETEhasznál, a hivatkozott sorok nem rendezhetők semmilyen sorrendben, és a ORDER BY záradék nem adható meg közvetlenül ebben az utasításban. Ha a TOP függvényt kell használnia a sorok értelmes időrendi sorrendben való törléséhez, akkor TOP kell használnia egy alkijelölési utasítás ORDER BY záradékával együtt. Tekintse meg a jelen témakörben szereplő Példák szakaszt.

TOP nem használható DELETE utasításban particionált nézetekhez.

Zárolási viselkedés

Alapértelmezés szerint egy DELETE utasítás mindig egy szándékkizárási (IX) zárolást szerez be az általa módosított táblaobjektumon és -oldalakon, egy kizárólagos (X) zárolást a módosító sorokon, és a zárolásokat a tranzakció befejezéséig tárolja.

A szándék kizárólagos (IX) zárolásával más tranzakciók nem módosíthatják ugyanazt az adatkészletet; olvasási műveletek csak a NOLOCK-tipp vagy az olvasási nem véglegesített elkülönítési szint használatával történhetnek. A DELETE utasítás időtartamára vonatkozó alapértelmezett viselkedés felülbírálásához táblázatos tippeket adhat meg egy másik zárolási módszer megadásával, azonban azt javasoljuk, hogy a tippeket csak tapasztalt fejlesztők és adatbázis-rendszergazdák használják végső megoldásként. További információ: Table Hints (Transact-SQL).

Ha sorokat töröl egy halomból, az adatbázismotor sor- vagy oldalzárolást használhat a művelethez. Ennek eredményeképpen a törlési művelet által üressé tett lapok továbbra is a halomhoz lesznek lefoglalva. Ha az üres oldalak nincsenek felszabadítva, az adatbázis más objektumai nem használhatják újra a társított területet.

A halom sorainak törléséhez és a lapok felszabadításához használja az alábbi módszerek egyikét.

  • Adja meg a TABLOCK tippet a DELETE utasításban. A TABLOCK tipp használatával a törlési művelet sor- vagy oldalzárolás helyett IX-zárolást alkalmaz az objektumon. Így a lapok felszabadíthatók. A TABLOCK tippről további információt a táblázatmutatók (Transact-SQL)című témakörben talál.

  • Használja TRUNCATE TABLE, ha az összes sort törölni szeretné a táblából.

  • A sorok törlése előtt hozzon létre fürtözött indexet a halomon. A sorok törlése után elvetheti a fürtözött indexet. Ez a módszer több időt vesz igénybe, mint az előző metódusok, és több ideiglenes erőforrást használ.

Note

Az üres lapok bármikor eltávolíthatók a halomból a ALTER TABLE <table_name> REBUILD utasítással.

Ha az optimalizált zárolás engedélyezve van, a zárolási viselkedés néhány aspektusa DELETE megváltozik. A kizárólagos (X) zárolások például csak a tranzakció befejezéséig lesznek tárolva. További információ: Optimalizált zárolási.

Naplózási viselkedés

A DELETE utasítás mindig teljes mértékben naplózva van.

Biztonság

Permissions

DELETE engedélyekre van szükség a céltáblában. SELECT engedélyekre is szükség van, ha az utasítás TARTALMAZ EGY WHERE záradékot.

A DELETE-engedélyek alapértelmezés szerint a sysadmin rögzített kiszolgálói szerepkör, a db_owner és db_datawriter rögzített adatbázis-szerepkörök, valamint a táblatulajdonos tagjai. A sysadmin, a db_ownerés a db_securityadmin szerepkörök tagjai és a táblatulajdonos más felhasználók számára is átadhatnak engedélyeket.

Examples

Category Kiemelt szintaxiselemek
Alapvető szintaxis DELETE
Törölt sorok korlátozása WHERE * FROM * kurzor *
Sorok törlése távoli táblázatból Csatolt kiszolgáló * OPENQUERY sorkészletfüggvény * OPENDATASOURCE sorkészletfüggvény
A DELETE utasítás eredményeinek rögzítése OUTPUT záradék

Alapszintű szintaxis

Az ebben a szakaszban található példák a DELETE utasítás alapvető funkcióit mutatják be a minimálisan szükséges szintaxis használatával.

A. A DELETE használata WHERE záradék nélkül

A következő példa törli az összes sort az SalesPersonQuotaHistory AdventureWorks2025 adatbázis táblájából, mivel a WHERE záradék nem korlátozza a törölt sorok számát.

DELETE FROM Sales.SalesPersonQuotaHistory;  
GO  

A törölt sorok korlátozása

Az ebben a szakaszban szereplő példák bemutatják, hogyan korlátozható a törölni kívánt sorok száma.

B. Sorok halmazának törlése a WHERE záradék használatával

A következő példa törli az összes sort az ProductCostHistory AdventureWorks2025 adatbázis táblázatából, ahol az oszlop értéke StandardCost nagyobb, mint 1000.00.

DELETE FROM Production.ProductCostHistory  
WHERE StandardCost > 1000.00;  
GO  

Az alábbi példa egy összetettebb WHERE záradékot mutat be. A WHERE záradék két feltételt határoz meg, amelyeket teljesíteni kell a törölni kívánt sorok meghatározásához. A StandardCost oszlop értékének 12.00 és 14.00 között kell lennie, és a SellEndDate oszlopban lévő értéknek null értékűnek kell lennie. A példa a @@ROWCOUNT függvény értékét is kinyomtatja a törölt sorok számának visszaadásához.

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. A törölni kívánt sor meghatározása kurzor használatával

A következő példa egyetlen sort törl EmployeePayHistory az AdventureWorks2025 adatbázis táblázatából egy kurzorral, amelyet .complex_cursor A törlési művelet csak a kurzorról jelenleg lekért egyetlen sort érinti.

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. Illesztések és albekérdezések használata az egyik táblában lévő adatokhoz egy másik tábla sorainak törléséhez

Az alábbi példák két módszert mutatnak be egy tábla sorainak törlésére egy másik tábla adatai alapján. Mindkét példában az AdventureWorks2025 adatbázis táblázatából származó SalesPersonQuotaHistory sorokat töröljük az évtől kezdi eladások alapján, amelyeket a SalesPerson táblázatban tároltak. Az első DELETE utasítás az ISO-kompatibilis subquery-megoldást, a második DELETE utasítás pedig a Transact-SQL FROM kiterjesztést mutatja a két tábla összekapcsolásához.

-- 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. A TOP használata a törölt sorok számának korlátozásához

Ha a DELETE (n) záradékot használja, a törlési műveletet n sorok számának véletlenszerű kiválasztásával hajtja végre. A következő példa törli 20 azokat a véletlenszerű sorokat az PurchaseOrderDetail AdventureWorks2025 adatbázis táblázatából, amelyek esedékes dátuma korábban van 2006. július 1-je előtt.

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

Ha a TOP függvényt kell használnia a sorok értelmes időrendi sorrendben történő törléséhez, akkor a TOP és az ORDER BY függvényt kell használnia egy alkijelölési utasításban. Az alábbi lekérdezés törli a PurchaseOrderDetail tábla 10 sorát, amelyek a legkorábbi határidővel rendelkeznek. Annak érdekében, hogy csak 10 sort töröljön, az alkijelölési utasításban megadott oszlop (PurchaseOrderID) a tábla elsődleges kulcsa. Ha egy nem kulcsú oszlopot használ az alkijelölési utasításban, az több mint 10 sor törlését eredményezheti, ha a megadott oszlop ismétlődő értékeket tartalmaz.

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

Sorok törlése távoli táblából

Az ebben a szakaszban szereplő példák bemutatják, hogyan törölhet sorokat egy távoli táblából egy csatolt kiszolgálói vagy sorkészletfüggvény a távoli táblára való hivatkozáshoz. Egy távoli tábla egy másik kiszolgálón vagy SQL Server-példányon található.

Az: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

F. Adatok törlése távoli táblából csatolt kiszolgáló használatával

Az alábbi példa sorokat töröl egy távoli táblából. A példa a távoli adatforrásra mutató hivatkozás sp_addlinkedserverhasználatával történő létrehozásával kezdődik. A csatolt kiszolgáló neve (MyLinkServer) ezután a négyrészes objektumnév részeként lesz megadva az server.catalog.schema.objectűrlapon.

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. Adatok törlése távoli táblából az OPENQUERY függvény használatával

Az alábbi példa a sorokat a OPENQUERY sorhalmazfüggvény megadásával törli egy távoli táblából. Ebben a példában az előző példában létrehozott csatolt kiszolgálónevet használjuk.

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

H. Adatok törlése távoli táblából az OPENDATASOURCE függvény használatával

Az alábbi példa sorokat töröl egy távoli táblából az OPENDATASOURCE sorkészletfüggvény megadásával. Adjon meg érvényes kiszolgálónevet az adatforráshoz server_name vagy server_name\instance_nameformátum használatával.

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

A DELETE utasítás eredményeinek rögzítése

I. A DELETE használata a OUTPUT záradékkal

Az alábbi példa bemutatja, hogyan lehet egy DELETE utasítás eredményeit egy táblázatváltozóba menteni az AdventureWorks2025 adatbázisban.

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. OUTPUT használata <from_table_name> a DELETE utasításban

A következő példa törli a sorokat az ProductProductPhoto AdventureWorks2025 adatbázis táblázatából a keresési kritériumok alapján, amelyeket az FROM állítás záradékában DELETE definiáltak. A OUTPUT záradék a törölt táblából, DELETED.ProductID, DELETED.ProductPhotoIDés a Product táblából származó oszlopokat adja vissza. Ez a FROM záradékban a törölni kívánt sorok megadására szolgál.

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éldák: Azure Synapse Analytics and Analytics Platform System (PDW)

K. Az összes sor törlése egy táblából

Az alábbi példa törli az összes sort a Table1 táblából, mert a WHERE záradék nem a törölt sorok számának korlátozására szolgál.

DELETE FROM Table1;  

L. Sorkészlet törlése táblázatból

Az alábbi példa törli az Table1 táblából azokat a sorokat, amelyek értéke 1000,00-nál nagyobb a StandardCost oszlopban.

DELETE FROM Table1  
WHERE StandardCost > 1000.00;  

M. A LABEL használata DELETE utasítással

Az alábbi példa egy DELETE utasítással ellátott címkét használ.

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

N. Címke és lekérdezési tipp használata a DELETE utasítással

Ez a lekérdezés a DELETE utasítással való lekérdezés-illesztés tippjének alapszintaxisát mutatja be. További információ az illesztési tippekről és az OPTION záradék használatáról: OPTION záradék (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. Törlés WHERE záradékkal

Ez a lekérdezés bemutatja, hogyan törölhető WHERE záradékkal, és nem FROM záradékkal.

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

P. Törlés egy másik táblához való csatlakozás eredménye alapján

Ez a példa bemutatja, hogyan törölhet egy táblából egy másik táblához való csatlakozás eredménye alapján.

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;  

Lásd még:

LÉTREHOZNI TRIGGERET (Transact-SQL)
BEHELYEZKEDÉS (Transact-SQL)
VÁLASZT (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
FRISSÍTÉS (Transact-SQL)
WITH common_table_expression (Transact-SQL)
@@ROWCOUNT (Transact-SQL)