Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
Raktár a Microsoft Fabricben
SQL-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
TABLOCKtippet aDELETEutasításban. ATABLOCKtipp 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. ATABLOCKtipprő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)