删除结果集中的行

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 AdventureWorks;
GO
DECLARE complex_cursor CURSOR FOR
    SELECT a.EmployeeID
    FROM HumanResources.EmployeePayHistory AS a
    WHERE RateChangeDate <> 
         (SELECT MAX(RateChangeDate)
          FROM HumanResources.EmployeePayHistory AS b
          WHERE a.EmployeeID = b.EmployeeID) ;
OPEN complex_cursor;
FETCH FROM complex_cursor;
DELETE FROM HumanResources.EmployeePayHistory
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO