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 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
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 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)