DELETE (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 az ideiglenes név szerinti eredményhalmazt, más néven common table kifejezést, amely az DELETE állítás hatókörén belül definiál. Az eredményhalmaz egy SELECT utasításból származik.

Gyakori táblázatkifejezések használhatók a SELECT, INSERT, UPDATE, és CREATE VIEW utasításokkal is. 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. A TOP kifejezésben hivatkozott sorok, amelyeket , INSERTUPDATE, vagy DELETE nem rendeznek sorrendben. További információ: TOP (Transact-SQL).

FROM
Egy opcionális kulcsszó, amely a DELETE kulcsszó és a cél table_or_view_name, vagyis rowset_function_limited kö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.

Egy táblaváltozó, a hatókörén belül, táblaforrásként is használható egy DELETE állí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. További információért a frissíthető nézetekről lásd CREATE VIEW (Transact-SQL).

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>
A művelet részeként törölt sorokat, vagy az ezeken DELETE alapuló kifejezéseket adja vissza. 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 Transact-SQL kiterjesztés lehetővé DELETE teszi, hogy az table_source> adatait <megadhassuk, és töröljük a megfelelő sorokat az első FROM kluzuzus táblázatából.

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 nincs WHERE klauzula, DELETE eltávolítja az összes sort a táblázatbó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 egy keresett DELETE állítás, amely HOL search_condition záradékot használ a törlésre vonatkozó sorok minősítésére. Egy keresett DELETE utasítás több sort törlik, 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 megadott kurzor aktuális pozíciójában történik.

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, és DELETE 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óért lásd: @@ROWCOUNT (Transact-SQL).

Hibakezelés

A hibakezelést DELETE megvalósíthatod az állításhoz azzal, hogy megadod az állítást egy TRY...CATCH konstrukcióban.

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.

Amikor egy DELETE utasítás aritmetikai hibával (túlcsordulás, nullával osztás vagy tartományhiba) találkozik az expression értékelés során, a Database Engine úgy kezeli ezeket a hibákat, mintha SET ARITHABORT be lenne állítva. A köteg többi része megszakítva, és hibaüzenet jelenik meg.

Interoperability

DELETE használható egy felhasználó által definiált függvény testében, ha a módosított objektum egy tábvá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 lehet olyan DELETE állításban megadva, amely közvetlenül vagy közvetve hivatkozik egy olyan nézetre, amelyen trigger INSTEAD OF van definiálva. További információért a INSTEAD OF kiváltó tényezőiről lásd CREATE TRIGGER (Transact-SQL)

Jelenleg a FROM záradék nem lehet meghatározni DELETE a Microsoft Fabric Warehouse alkalmazásáról szóló nyilatkozatban.

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. Megadhatod a táblatippeket az alapértelmezett viselkedés felülírásához a kijelentés időtartama DELETE alatt, ha megjelölsz egy másik zárolási módszert, azonban javasoljuk, hogy a tippeket csak utolsó esetben használják a tapasztalt fejlesztők és adatbázis-adminisztrátorok számára. 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 kijelentés mindig teljesen le van kötve.

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.

DELETE Az engedélyek alapértelmezetként a sysadmin fix szerver szerep tagjai, a db_owner fix és db_datawriter fix adatbázis szerepek, valamint a tábla tulajdonosa vonatkoznak. 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 nyilatkozat eredményeinek DELETE rögzítése OUTPUT záradék

Alapszintű szintaxis

Ebben a szakaszban található példák bemutatják az DELETE állítás alapvető funkcionalitását a minimum szükséges szintaxissal együtt.

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

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ényből is kinyomtatja az értéket, hogy visszaadja a törölt sorok számát.

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 egy TOP (n) záradékot használunk , DELETEa törlési műveletet véletlenszerűen n számú sorból álló kiválasztáson végzik. 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 nyilatkozat eredményeinek DELETE rögzítése

I. Használat DELETE az OUTPUT klauzulával

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-vel <> egy DELETE állí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. DELETE egy táblázatból származó sorhalmaz

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. LABEL használata egy DELETE állítással

A következő példa egy címkét használ az állítással DELETE .

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

N. Címkét és lekérdezési tippet használva az állításhoz DELETE

Ez a lekérdezés a DELETE utasítással való lekérdezés-illesztés tippjének alapszintaxisát jeleníti meg. 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:

CREATE TRIGGER (Transact-SQL)
INSERT (Transact-SQL)
VÁLASZT (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
UPDATE (Transact-SQL)
WITH common_table_expression (Transact-SQL)
@@ROWCOUNT (Transact-SQL)