Ekinlikler
31 Mar 23 - 2 Nis 23
En büyük SQL, Fabric ve Power BI öğrenme etkinliği. 31 Mart – 2 Nisan. 400 ABD doları tasarruf etmek için FABINSIDER kodunu kullanın.
Bugün kaydolunBu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analytics Platform Sistemi (PDW)
Warehouse in Microsoft Fabric
SQL veritabanında Microsoft Fabric
SQL Server'da bir tablo veya görünümden bir veya daha fazla satırı kaldırır.
Transact-SQL söz dizimi kuralları
-- 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 ] ) ]
[; ]
WITH <common_table_expression>
DELETE deyimi kapsamında tanımlanan ve ortak tablo ifadesi olarak da bilinen geçici adlandırılmış sonuç kümesini belirtir. Sonuç kümesi bir SELECT deyiminden türetilir.
Ortak tablo ifadeleri SELECT, INSERT, UPDATE ve CREATE VIEW deyimleriyle de kullanılabilir. Daha fazla bilgi için bkz. WITH common_table_expression (Transact-SQL).
TOP (ifade) [ YÜZDE ]
Silinecek rastgele satırların sayısını veya yüzdesini belirtir.
ifade bir sayı veya satırların yüzdesi olabilir. INSERT, UPDATE veya DELETE ile kullanılan TOP ifadesinde başvuruda bulunan satırlar herhangi bir sırada düzenlenmez. Daha fazla bilgi için bkz. TOP (Transact-SQL).
KAYNAK
DELETE anahtar sözcüğü ile hedef table_or_view_namearasında kullanılabilecek isteğe bağlı bir anahtar sözcük veya rowset_function_limited.
table_alias
Satırların silindiği tabloyu veya görünümü temsil eden FROM table_source yan tümcesinde belirtilen diğer ad.
server_name
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
Tablonun veya görünümün bulunduğu sunucunun adı (bağlı sunucu adı veya sunucu adı olarak OPENDATASOURCE işlevi). server_name belirtilirse database_name ve schema_name gerekir.
database_name
Veritabanının adı.
schema_name
Tablo veya görünümün ait olduğu şemanın adı.
table_or_view_name
Satırların kaldırılacağı tablonun veya görünümün adı.
Kapsam dahilindeki bir tablo değişkeni, DELETE deyiminde tablo kaynağı olarak da kullanılabilir.
table_or_view_name tarafından başvuruda bulunılan görünümün güncelleştirilebilir olması ve görünüm tanımının FROM yan tümcesinde tam olarak bir temel tabloya başvurması gerekir. Güncelleştirilebilir görünümler hakkında daha fazla bilgi için bkz. CREATE VIEW (Transact-SQL).
rowset_function_limited
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
Sağlayıcı özelliklerine bağlı olarak OPENQUERY veya OPENROWSET işlevini.
WITH (<table_hint_limited> [... n] )
Hedef tablo için izin verilen bir veya daha fazla tablo ipucunu belirtir. WITH anahtar sözcüğü ve parantezler gereklidir. NOLOCK ve READUNCOMMITTED'a izin verilmiyor. Tablo ipuçları hakkında daha fazla bilgi için bkz. Tablo İpuçları (Transact-SQL).
<OUTPUT_Clause>
DELETE işleminin bir parçası olarak silinen satırları veya bunları temel alan ifadeleri döndürür. OUTPUT yan tümcesi, görünümleri veya uzak tabloları hedefleyen hiçbir DML deyiminde desteklenmez. Bu yan tümcenin bağımsız değişkenleri ve davranışı hakkında daha fazla bilgi için bkz. OUTPUT Yan Tümcesi (Transact-SQL).
FROM table_source
Ek bir FROM yan tümcesi belirtir. DELETE için bu Transact-SQL uzantısı, <table_source> verilerinin belirtilmesine ve ilk FROM yan tümcesindeki tablodan ilgili satırların silinmesine olanak tanır.
Kaldırılacak satırları tanımlamak için WHERE yan tümcesindeki bir alt sorgu yerine birleştirme belirten bu uzantı kullanılabilir.
Daha fazla bilgi için bkz. from (Transact-SQL) .
NEREDE
Silinen satır sayısını sınırlamak için kullanılan koşulları belirtir. WHERE yan tümcesi sağlanmazsa, DELETE tablodan tüm satırları kaldırır.
WHERE yan tümcesinde belirtilenlere bağlı olarak iki silme işlemi biçimi vardır:
Arama yapılan silmeler, silinecek satırları niteleme amacıyla bir arama koşulu belirtir. Örneğin WHERE column_name = değeri.
Konumlandırılan silme işlemleri, bir imleç belirtmek için CURRENT OF yan tümcesini kullanır. Silme işlemi imlecin geçerli konumunda gerçekleşir. Bu, silinecek satırları niteleyen WHERE search_condition yan tümcesi kullanan arama yapılan DELETE deyiminden daha doğru olabilir. Arama koşulu tek bir satırı benzersiz olarak tanımlamıyorsa, aranan DELETE deyimi birden çok satırı siler.
<search_condition>
Silinecek satırların kısıtlayıcı koşullarını belirtir. Arama koşuluna dahil edilebilecek koşul sayısıyla ilgili bir sınır yoktur. Daha fazla bilgi için bkz. Arama Koşulu (Transact-SQL).
AKDI
DELETE işleminin belirtilen imlecin geçerli konumunda gerçekleştirildiğini belirtir.
KÜRESEL
cursor_name genel bir imleç başvurduğunu belirtir.
cursor_name
Getirme işleminin yapıldığı açık imlecin adıdır. Hem genel hem de adı cursor_name olan yerel bir imleç varsa, genel imleç belirtilirse bu bağımsız değişken genel imleç anlamına gelir; aksi takdirde, yerel imleç anlamına gelir. İmleç güncelleştirmelere izin vermelidir.
cursor_variable_name
İmleç değişkeninin adı. İmleç değişkeni, güncelleştirmelere izin veren bir imleç başvurmalıdır.
OPTION (<query_hint> [ ,... n] )
Veritabanı Altyapısı'nın deyimi işleme biçimini özelleştirmek için hangi iyileştirici ipuçlarının kullanıldığını gösteren anahtar sözcükler. Daha fazla bilgi için bkz. Sorgu İpuçları (Transact-SQL).
Tablodaki tüm satırları silmek için TRUNCATE TABLE
kullanın.
TRUNCATE TABLE
DELETE'den daha hızlıdır ve daha az sistem ve işlem günlüğü kaynağı kullanır.
TRUNCATE TABLE
kısıtlamaları vardır; örneğin, tablo çoğaltmaya katılamaz. Daha fazla bilgi için bkz. TRUNCATE TABLE (Transact-SQL)
İstemci uygulamasına silinen satır sayısını döndürmek için @@ROWCOUNT
işlevini kullanın. Daha fazla bilgi için bkz. @@ROWCOUNT (Transact-SQL).
bir TRY...CATCH
yapısında deyimini belirterek DELETE deyimi için hata işleme uygulayabilirsiniz.
DELETE
deyimi tetikleyiciyi ihlal ederse veya FOREIGN KEY
kısıtlaması olan başka bir tablodaki veriler tarafından başvuruda bulunan bir satırı kaldırmaya çalışırsa başarısız olabilir.
DELETE
birden çok satırı kaldırırsa ve kaldırılan satırlardan herhangi biri tetikleyiciyi veya kısıtlamayı ihlal ederse, deyim iptal edilir, bir hata döndürülür ve hiçbir satır kaldırılmaz.
Bir DELETE deyimi ifade değerlendirmesi sırasında oluşan bir aritmetik hatayla (taşma, sıfıra bölme veya etki alanı hatası) karşılaştığında, Veritabanı Altyapısı bu hataları SET ARITHABORT
AÇıK olarak işler. Toplu işleminin geri kalanı iptal edilir ve bir hata iletisi döndürülür.
Değiştirilen nesne bir tablo değişkeniyse DELETE, kullanıcı tanımlı bir işlevin gövdesinde kullanılabilir.
FILESTREAM sütunu içeren bir satırı sildiğinizde, temel alınan dosya sistemi dosyalarını da silersiniz. Temel alınan dosyalar FILESTREAM çöp toplayıcısı tarafından kaldırılır. Daha fazla bilgi için bkz. Transact-SQLile FILESTREAM Verilerine Erişme.
FROM yan tümcesi, doğrudan veya dolaylı olarak, üzerinde tanımlanmış bir INSTEAD OF
tetikleyicisi olan bir görünüme başvuran bir DELETE deyiminde belirtilemez. TETIKLEYICILER YERİNE hakkında daha fazla bilgi için bkz. CREATE TRIGGER (Transact-SQL).
Şu anda FROM yan tümcesi Microsoft Fabric'teki Ambar'daki DELETE deyiminde belirtilemez.
DELETE
ile TOP
kullanıldığında, başvuruda bulunılan satırlar herhangi bir sırayla düzenlenmez ve ORDER BY
yan tümcesi bu deyimde doğrudan belirtilmez. Satırları anlamlı bir kronolojik sırada silmek için TOP kullanmanız gerekiyorsa, TOP
bir alt seçim deyimindeki ORDER BY
yan tümcesiyle birlikte kullanmanız gerekir. Bu konu başlığında yer alan Örnekler bölümüne bakın.
TOP
bölümlenmiş görünümlerde DELETE
deyiminde kullanılamaz.
Varsayılan olarak, DELETE
deyimi her zaman tablo nesnesine ve değiştirdiği sayfalara özel bir amaç (IX
) kilidi, değiştirdiği satırlarda özel (X
) kilidi alır ve işlem tamamlanana kadar bu kilitleri tutar.
Özel amaçlı (IX
) kilit ile, başka hiçbir işlem aynı veri kümesini değiştiremez; okuma işlemleri yalnızca NOLOCK ipucunun kullanılmasıyla veya kaydedilmemiş yalıtım düzeyinin okunmasıyla gerçekleşebilir. Başka bir kilitleme yöntemi belirterek DELETE deyimi süresince bu varsayılan davranışı geçersiz kılmak için tablo ipuçları belirtebilirsiniz, ancak ipuçlarının yalnızca deneyimli geliştiriciler ve veritabanı yöneticileri tarafından son çare olarak kullanılmasını öneririz. Daha fazla bilgi için bkz. Tablo İpuçları (Transact-SQL).
Bir yığından satırlar silindiğinde, Veritabanı Altyapısı işlem için satır veya sayfa kilitleme kullanabilir. Sonuç olarak, silme işlemi tarafından boş yapılan sayfalar yığına ayrılmış olarak kalır. Boş sayfalar serbest bırakılmadığında, ilişkili alan veritabanındaki diğer nesneler tarafından yeniden kullanılamaz.
Bir yığındaki satırları silmek ve sayfaları serbest bırakmak için aşağıdaki yöntemlerden birini kullanın.
DELETE
deyiminde TABLOCK
ipucunu belirtin.
TABLOCK
ipucunu kullanmak, silme işleminin satır veya sayfa kilidi yerine nesne üzerinde IX kilidi almasına neden olur. Bu, sayfaların serbest bırakılmasına olanak tanır.
TABLOCK
ipucu hakkında daha fazla bilgi için bkz. Tablo İpuçları (Transact-SQL).
Tüm satırlar tablodan silinecekse TRUNCATE TABLE
kullanın.
Satırları silmeden önce yığında kümelenmiş bir dizin oluşturun. Satırlar silindikten sonra kümelenmiş dizini bırakabilirsiniz. Bu yöntem önceki yöntemlere göre daha fazla zaman alır ve daha fazla geçici kaynak kullanır.
Not
boş sayfalar, ALTER TABLE <table_name> REBUILD
deyimi kullanılarak herhangi bir zamanda bir yığından kaldırılabilir.
İyileştirilmiş kilitleme etkinleştirilirse, DELETE
için kilitleme davranışının bazı yönleri değişir. Örneğin, işlem tamamlanana kadar özel (X
) kilitler tutulmaz. Daha fazla bilgi için bkz. İyileştirilmiş kilitleme.
DELETE deyimi her zaman tam olarak günlüğe kaydedilir.
hedef tabloda DELETE
izinleri gereklidir. deyimi where yan tümcesi içeriyorsa SELECT
izinleri de gereklidir.
DELETE izinleri varsayılan olarak sysadmin
sabit sunucu rolünün üyeleri, db_owner
ve db_datawriter
sabit veritabanı rolleri ve tablo sahibidir.
sysadmin
, db_owner
ve db_securityadmin
rollerinin üyeleri ve tablo sahibi izinleri diğer kullanıcılara aktarabilir.
Kategori | Öne çıkan söz dizimi öğeleri |
---|---|
Temel söz dizimi | SİLMEK |
Silinen satırları sınırlama | WHERE * FROM * imleç * |
Uzak tablodaki satırları silme | Bağlı sunucu * OPENQUERY satır kümesi işlevi * OPENDATASOURCE satır kümesi işlevi |
DELETE deyiminin sonuçlarını yakalama | OUTPUT yan tümcesi |
Bu bölümdeki örnekler, gereken en düşük söz dizimini kullanarak DELETE deyiminin temel işlevselliğini gösterir.
Aşağıdaki örnek, silinen satır sayısını sınırlamak için WHERE yan tümcesi kullanılmadığından AdventureWorks2022 veritabanındaki SalesPersonQuotaHistory
tablosundaki tüm satırları siler.
DELETE FROM Sales.SalesPersonQuotaHistory;
GO
Bu bölümdeki örneklerde, silinecek satır sayısının nasıl sınırlanacağı gösterilmektedir.
Aşağıdaki örnek AdventureWorks2022 veritabanındaki ProductCostHistory
tablosundan StandardCost
sütunundaki değerin 1000.00
'den fazla olduğu tüm satırları siler.
DELETE FROM Production.ProductCostHistory
WHERE StandardCost > 1000.00;
GO
Aşağıdaki örnekte daha karmaşık bir WHERE yan tümcesi gösterilmektedir. WHERE yan tümcesi, silinecek satırları belirlemek için karşılanması gereken iki koşulu tanımlar.
StandardCost
sütunundaki değer 12.00
ile 14.00
arasında olmalı ve SellEndDate
sütundaki değer null olmalıdır. Örnek, silinen satır sayısını döndürmek için @@ROWCOUNT işlevindeki değeri de yazdırır.
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));
Aşağıdaki örnek, complex_cursor
adlı bir imleç kullanarak AdventureWorks2022 veritabanındaki EmployeePayHistory
tablosundan tek bir satırı siler. Silme işlemi, imleçten şu anda getirilen tek satırı etkiler.
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
Aşağıdaki örneklerde, bir tablodaki satırları başka bir tablodaki verilere göre silmenin iki yolu gösterilmektedir. Her iki örnekte de AdventureWorks2022 veritabanındaki SalesPersonQuotaHistory
tablosundaki satırlar, SalesPerson
tablosunda depolanan yıllık satışlara göre silinir. İlk DELETE
deyimi ISO uyumlu alt sorgu çözümünü, ikinci DELETE
deyimi ise iki tabloyu birleştirmek için from uzantısını Transact-SQL gösterir.
-- 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;
DELETE ile top (n) yan tümcesi kullanıldığında, silme işlemi n satır sayısı rastgele seçiminde gerçekleştirilir. Aşağıdaki örnek, AdventureWorks2022 veritabanındaki PurchaseOrderDetail
tablosundan son tarihleri 1 Temmuz 2006'dan önceki 20
rastgele satırları siler.
DELETE TOP (20)
FROM Purchasing.PurchaseOrderDetail
WHERE DueDate < '20020701';
GO
Satırları anlamlı bir kronolojik sırada silmek için TOP kullanmanız gerekiyorsa, bir alt seçim deyiminde ORDER BY ile birlikte TOP kullanmanız gerekir. Aşağıdaki sorgu, PurchaseOrderDetail
tablosunun en erken son tarihlere sahip 10 satırını siler. Yalnızca 10 satırın silindiğinden emin olmak için, alt seçim deyiminde (PurchaseOrderID
) belirtilen sütun tablonun birincil anahtarıdır. Subselect deyiminde anahtar olmayan bir sütun kullanılması, belirtilen sütun yinelenen değerler içeriyorsa 10'dan fazla satırın silinmesine neden olabilir.
DELETE FROM Purchasing.PurchaseOrderDetail
WHERE PurchaseOrderDetailID IN
(SELECT TOP 10 PurchaseOrderDetailID
FROM Purchasing.PurchaseOrderDetail
ORDER BY DueDate ASC);
GO
Bu bölümdeki örneklerde, uzak tabloya başvurmak için bağlı sunucu veya satır kümesi işlevi kullanarak uzak tablodaki satırları silme işlemi gösterilmektedir. Sql Server'ın farklı bir sunucusunda veya örneğinde bir uzak tablo var.
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
Aşağıdaki örnek, uzak bir tablodan satırları siler. Örnek, sp_addlinkedserverkullanarak uzak veri kaynağına bir bağlantı oluşturarak başlar.
MyLinkServer
bağlı sunucu adı, server.catalog.schema.object biçimindeki dört parçalı nesne adının bir parçası olarak belirtilir.
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
Aşağıdaki örnek, OPENQUERY satır kümesi işlevini belirterek uzak bir tablodaki satırları siler. Önceki örnekte oluşturulan bağlı sunucu adı bu örnekte kullanılmıştır.
DELETE OPENQUERY (MyLinkServer, 'SELECT Name, GroupName
FROM AdventureWorks2022.HumanResources.Department
WHERE DepartmentID = 18');
GO
Aşağıdaki örnek, OPENDATASOURCE satır kümesi işlevini belirterek uzak bir tablodan satırları siler. server_name veya server_name\instance_namebiçimini kullanarak veri kaynağı için geçerli bir sunucu adı belirtin.
DELETE FROM OPENDATASOURCE('SQLNCLI',
'Data Source= <server_name>; Integrated Security=SSPI')
.AdventureWorks2022.HumanResources.Department
WHERE DepartmentID = 17;
Aşağıdaki örnekte, bir DELETE
deyiminin sonuçlarını AdventureWorks2022 veritabanındaki bir tablo değişkenine kaydetme gösterilmektedir.
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
Aşağıdaki örnek, DELETE
deyiminin FROM
yan tümcesinde tanımlanan arama ölçütlerine göre AdventureWorks2022 veritabanındaki ProductProductPhoto
tablosundaki satırları siler.
OUTPUT
yan tümcesi, silinen tablodaki sütunları, DELETED.ProductID
, DELETED.ProductPhotoID
ve Product
tablosundaki sütunları döndürür. Bu, silinecek satırları belirtmek için FROM
yan tümcesinde kullanılır.
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
Aşağıdaki örnek, silinen satır sayısını sınırlamak için WHERE yan tümcesi kullanılmadığından Table1
tablosundaki tüm satırları siler.
DELETE FROM Table1;
Aşağıdaki örnek, StandardCost
sütununda 1000,00'den büyük bir değere sahip olan Table1
tablosundaki tüm satırları siler.
DELETE FROM Table1
WHERE StandardCost > 1000.00;
Aşağıdaki örnekte DELETE deyimiyle bir etiket kullanılır.
DELETE FROM Table1
OPTION ( LABEL = N'label1' );
Bu sorgu, DELETE deyimiyle sorgu birleştirme ipucu kullanmaya yönelik temel söz dizimini gösterir. Birleştirme ipuçları ve OPTION yan tümcesini kullanma hakkında daha fazla bilgi için bkz. OPTION Yan Tümcesi (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 ) ;
Bu sorgu, FROM yan tümcesi kullanmadan WHERE yan tümcesi kullanarak silmeyi gösterir.
DELETE tableA WHERE EXISTS (
SELECT TOP 1 1 FROM tableB tb WHERE tb.col1 = tableA.col1
)
Bu örnekte, başka bir tabloyla birleştirme sonucuna bağlı olarak tablodan silme işlemi gösterilmektedir.
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;
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)
Ekinlikler
31 Mar 23 - 2 Nis 23
En büyük SQL, Fabric ve Power BI öğrenme etkinliği. 31 Mart – 2 Nisan. 400 ABD doları tasarruf etmek için FABINSIDER kodunu kullanın.
Bugün kaydolun