删除结果集中的行
ADO、OLE DB 和 ODBC API 支持从结果集中删除应用程序所在的当前行。应用程序执行某个语句,然后从结果集中提取行。应用程序提取行后,就可以使用以下函数或方法删除该行:
ADO 应用程序使用 Recordset 对象的 Delete 方法。
OLE DB 应用程序使用 IRowsetChange 接口的 DeleteRows 方法。
ODBC 应用程序使用带 SQL_DELETE 选项的 SQLSetPos 函数。
DB-library 应用程序使用 dbcursor 执行 CRS_DELETE 操作。
Transact-SQL 脚本、存储过程和触发器可以使用 DELETE 语句中的 WHERE CURRENT OF 子句来删除它们当前所在的游标行。以下示例使用名为 complex_cursor 的游标从 EmployeePayHistory 表中删除一行。DELETE 只影响当前从游标中提取的一行。
USE AdventureWorks2008R2;
GO
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