最近剛好遇到工作上需要對特定資料表,根據排序後的第一筆資料進行刪除
過往可能需要先查詢出排序後第一筆資料關鍵Key值再進行刪除
範例資料
CREATE TABLE dbo.T1 ( C1 INT PRIMARY KEY IDENTITY(1,1))
INSERT INTO dbo.T1 DEFAULT VALUES
GO 10000
過去
--刪除排序後第一筆資料
DECLARE @No INT
SET @No = (SELECT TOP 1 C1 FROM dbo.T1 ORDER BY C1)
DELETE dbo.T1 WHERE C1 = @No
--刪除排序後前一百筆資料
DELETE dbo.T1
WHERE C1 IN
(
SELECT TOP 100 C1 FROM dbo.T1 ORDER BY C1
)
但當Key值是多欄位或是語法更複雜時,SQL Script會越來越複雜,效能上也因為操作的動作變多還變差
透過使用SQL Server CTE的方式可以提升效能,語法也會變得比較簡潔(個人認為XD)
使用CTE方式
;WITH DEL AS
(
SELECT TOP 100 * FROM dbo.T1 ORDER BY C1
)
DELETE DEL
使用評估計畫比較兩者的效能
原本的方法因為多包了一層子查詢所以動作上比較多,而使用CTE進行刪除,則直接抓取到目標資料後進行刪除
我使用的範例比較簡陋,如果遇到更加複雜的狀況,可能還是要多嘗試不同語法後找到適合的方法
如果大家有更快捷的方式也可以分享一下^^
留言列表