다음을 통해 공유


위치 지정 작업으로 행 변경

업데이트할 수 있는 커서는 커서를 통해 행을 업데이트하는 데이터 수정 문을 지원합니다. 업데이트할 수 있는 커서의 행에 위치를 지정하는 경우 커서에 현재 행을 작성할 때 사용하는 기본 테이블 행에 대해 업데이트 또는 삭제 작업을 수행할 수 있습니다. 이것을 위치 지정 업데이트라고 합니다.

위치 지정 업데이트는 커서를 연 연결에서 수행됩니다. 이렇게 하면 데이터 수정 작업이 커서와 동일한 트랜잭션 공간에서 실행될 수 있으며 업데이트가 커서에서 보유한 잠금에 의해 차단되는 것을 방지합니다.

커서에서 위치 지정 업데이트를 수행하는 방법은 두 가지가 있습니다.

  • UPDATE 또는 DELETE 문의 Transact-SQL WHERE CURRENT OF 절

  • ODBC SQLSetPos 함수와 같은 데이터베이스 API 위치 지정 업데이트 함수 또는 메서드

Transact-SQL로 위치 지정 업데이트 수행

Transact-SQL WHERE CURRENT OF 절은 주로 커서의 특정 행을 기준으로 수정해야 할 때 Transact-SQL 저장 프로시저, 트리거 및 스크립트에서 사용됩니다. 저장 프로시저, 트리거 또는 스크립트는 다음을 수행합니다.

  • 커서를 DECLARE 및 OPEN합니다.

  • FETCH 문을 사용하여 커서의 행에 위치를 지정합니다.

  • WHERE CURRENT OF 절을 사용하여 UPDATE 또는 DELETE 문을 실행합니다. DECLARE 문의 cursor_name을 WHERE CURRENT OF 절의 cursor_name으로 사용합니다.

API로 위치 지정 업데이트 수행

OLE DB 및 ADO 및 함수와 메서드를 사용하여 만든 커서는 이름이 없으므로 WHERE CURRENT OF 절에서 사용되지 않습니다. 그러나 ODBC에서는 SQLGetCursorName 함수를 통해 API 서버 커서의 이름을 얻을 수 있습니다. Transact-SQL 문을 사용하여 커서 특성을 설정하고 커서를 연 후에는 SQLGetCursorName 함수를 사용하여 커서에 대한 이름을 얻습니다. 커서에서 위치를 지정한 후에는 SQLGetCursorName에서 반환한 이름을 참조하는 WHERE CURRENT OF 절을 사용하여 UPDATE 또는 DELETE 문을 실행합니다. 그러나 이 방법은 권장되지 않습니다. 대신 ODBC API에서 위치 지정 업데이트 함수를 사용하는 것이 좋습니다.

데이터베이스 API는 API 서버 커서에 대해 위치 지정 작업을 수행하는 두 가지 방법을 지원합니다. 한 가지 방법은 ODBC에서 지원되고 다른 하나는 OLE DB 및 ADO에서 지원됩니다.

ODBC에서는 커서의 열을 프로그램 변수에 바인딩한 다음 커서의 특정 행에 위치시킵니다. 위치 지정 업데이트를 수행하면 프로그램 변수의 데이터 값이 새 값으로 변경됩니다. SQLSetPos 함수를 호출하여 위치 지정 작업을 수행합니다.

이 함수에는 다음 옵션을 사용할 수 있습니다.

  • SQLSetPos(SQL_POSITION)
    ODBC에만 해당되며 ODBC 커서를 현재 행 집합의 특정 행에 위치시킵니다.

  • SQLSetPos(SQL_REFRESH)
    커서가 현재 위치한 행으로부터 가져온 값을 갖는 결과 집합 열에 바인딩된 프로그램 변수를 새로 고칩니다.

  • SQLSetPos(SQL_UPDATE)
    결과 집합 열에 바인딩된 프로그램 변수에 저장된 값으로 커서의 현재 행을 업데이트합니다.

  • SQLSetPos(SQL_DELETE)
    커서에서 현재 행을 삭제합니다.

OLE DB 및 ADO는 각기 다른 모델을 사용하여 위치 지정 업데이트를 지원합니다.

OLE DB에서는 행 집합 내에서 행에 위치를 지정할 때 IRowsetChange::SetData 또는 IRowsetChange::DeleteRows 메서드를 호출하여 위치 지정 업데이트를 수행합니다. OLE DB 공급자가 IRowsetUpdate::Update를 지원하면 IRowsetChange 메서드를 사용하여 변경한 내용이 IRowsetUpdate::Update를 호출할 때까지 캐시됩니다. OLE DB 공급자가 IRowsetUpdate::Update를 지원하지 않으면 IRowsetChange 메서드를 사용하여 변경한 내용이 즉시 적용됩니다.

ADO에서는 레코드 집합 내에서 행에 위치를 지정할 때 Recordset 개체의 Update 또는 Delete 메서드를 호출하여 위치 지정 업데이트를 수행합니다. OLE DB 공급자가 IRowsetUpdate::Update를 지원하면 Recordset 개체의 Update 또는 Delete 메서드를 사용하여 변경한 내용이 Recordset 개체의 UpdateBatch 메서드를 호출할 때까지 캐시됩니다. OLE DB 공급자가 IRowsetUpdate::Update를 지원하지 않으면 Recordset 개체의 Update 또는 Delete 메서드를 사용하여 변경한 내용이 즉시 적용됩니다.