使用 DELETE 刪除資料列
更新: 2006 年 4 月 14 日
DELETE 陳述式可以移除資料表或檢視中的一或多個資料列。
DELETE 語法的簡化形式為:
DELETE table_or_view
FROM table_sources
WHERE search_condition
table_or_view 參數表示要從中刪除資料列的資料表或檢視。在 table_or_view 中,所有符合 WHERE 搜尋條件的資料列將被刪除。如果沒有指定 WHERE 子句,將刪除所有 table_or_view 中的資料列。FROM 子句可指定其他資料表或檢視,和聯結可由 WHERE 子句搜尋條件中之述詞使用的條件,限制要從 table_or_view. 刪除的資料列。資料列不會從 FROM 子句中命名的資料表刪除,只會從 table_or_view 中命名的資料表刪除。
資料庫將保留所有資料列均被移除的資料表。DELETE 陳述式只能刪除資料表中的資料列,只有使用 DROP TABLE 陳述式才可從資料庫中移除資料表。
刪除堆積中的資料列
從堆積中刪除資料列後,Database Engine 可能會針對作業使用資料列或頁面鎖定。如此一來,由刪除作業清空的頁面仍然會配置給堆積。如果未取消空白頁面的配置,資料庫中的其他物件就無法重複使用相關聯的空間。
若要刪除堆積中的資料列及取消配置頁面,請使用下列其中一個方法。
- 在 DELETE 陳述式中指定 TABLOCK 提示。使用 TABLOCK 提示會造成刪除作業對資料表進行共用鎖定,而非資料列或頁面鎖定。如此可允許取消配置頁面。如需有關 TABLOCK 提示的詳細資訊,請參閱<資料表提示 (Transact-SQL)>。
- 如果要從資料表刪除所有資料列,請使用 TRUNCATE TABLE。
- 請先在堆積上建立叢集索引之後,再刪除資料列。您可以在刪除資料列之後卸除叢集索引。這個方法會比之前的方法耗用更多的時間,而且會使用更多的暫存資源。
如需有關鎖定的詳細資訊,請參閱<Database Engine 中的鎖定>。
範例
下列範例會刪除 SalesPersonQuotaHistory
資料表中的所有資料列,因為並未利用 WHERE 子句來限制刪除的資料列數。
USE AdventureWorks;
GO
DELETE FROM Sales.SalesPersonQuotaHistory;
GO
下列範例會刪除 ProductCostHistory
資料表中,所有 StandardCost
資料行值超出 1000.00
的資料列。
USE AdventureWorks;
GO
DELETE FROM Production.ProductCostHistory
WHERE StandardCost > 1000.00;
GO
下列範例會顯示從以聯結或相關子查詢為基礎的基底資料表中刪除記錄時,所用的 Transact-SQL 延伸模組。第一個 DELETE
陳述式會顯示 SQL-2003 相容子查詢方案,第二個 DELETE
陳述式會顯示 Transact-SQL 延伸模組。這兩項查詢都會從以 SalesPerson
資料表所儲存之年度目前銷售情況為基礎的 SalesPersonQuotaHistory
資料表中移除資料列。
-- SQL-2003 Standard subquery
USE AdventureWorks;
GO
DELETE FROM Sales.SalesPersonQuotaHistory
WHERE SalesPersonID IN
(SELECT SalesPersonID
FROM Sales.SalesPerson
WHERE SalesYTD > 2500000.00);
GO
-- Transact-SQL extension
USE AdventureWorks;
GO
DELETE FROM Sales.SalesPersonQuotaHistory
FROM Sales.SalesPersonQuotaHistory AS spqh
INNER JOIN Sales.SalesPerson AS sp
ON spqh.SalesPersonID = sp.SalesPersonID
WHERE sp.SalesYTD > 2500000.00;
GO
請參閱
概念
刪除結果集中的資料列
使用 TRUNCATE TABLE 刪除所有資料列
使用 TOP 來限制刪除的資料列
其他資源
DROP TABLE (Transact-SQL)
DELETE (Transact-SQL)
刪除資料表的資料
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 4 月 14 日 |
|