다음을 통해 공유


위치 지정 업데이트(ODBC)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)

ODBC는 커서에서 위치가 지정된 업데이트를 수행하는 두 가지 메서드를 지원합니다.

  • SQLSetPos

  • WHERE CURRENT OF 절

더 일반적인 방법은 SQLSetPos를 사용하는 것입니다. 다음과 같은 옵션이 있습니다.

SQL_POSITION
커서를 현재 행 집합의 특정 행에 위치시킵니다.

SQL_REFRESH
커서가 현재 배치된 행의 값을 사용하여 결과 집합 열에 바인딩된 프로그램 변수를 새로 고칩니다.

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

SQL_DELETE
커서에서 현재 행을 삭제합니다.

문 핸들 커서 특성이 서버 커서를 사용하도록 설정된 경우 SQLSetPos 를 문 결과 집합과 함께 사용할 수 있습니다. 결과 집합 열은 프로그램 변수에 바인딩되어야 합니다. 애플리케이션이 행을 가져오자마자 SQLSetPos(SQL_POSTION)를 호출하여 행에 커서를 배치합니다. 그런 다음 SQLSetPos(SQL_DELETE)를 호출하여 현재 행을 삭제하거나, 새 데이터 값을 바인딩된 프로그램 변수로 이동하고 SQLSetPos(SQL_UPDATE)를 호출하여 현재 행을 업데이트할 수 있습니다.

애플리케이션은 SQLSetPos를 사용하여 행 집합 의 행을 업데이트하거나 삭제할 수 있습니다. SQLSetPos를 호출하는 것은 SQL 문을 생성하고 실행하는 편리한 대안입니다. SQLSetPos는 현재 행 집합에서 작동하며 SQLFetchScroll을 호출한 후에만 사용할 수 있습니다.

행 집합 크기는 특성 인수가 SQL_ATTR_ROW_ARRAY_SIZE SQLSetStmtAttr 호출에 의해 설정됩니다. SQLSetPos는 새 행 집합 크기를 사용하지만 SQLFetch 또는 SQLFetchScroll을 호출한 후에만 사용됩니다. 예를 들어 행 집합 크기가 변경 되면 SQLSetPos 가 호출되고 SQLFetch 또는 SQLFetchScroll 이 호출됩니다. SQLSetPos에 대한 호출은 이전 행 집합 크기를 사용하지만 SQLFetch 또는 SQLFetchScroll은 새 행 집합 크기를 사용합니다.

행 집합의 첫 번째 행 번호는 1입니다. SQLSetPosRowNumber 인수는 행 집합의 행을 식별해야 합니다. 즉, 해당 값은 1과 가장 최근에 가져온 행 수 사이의 범위에 있어야 합니다. 행 집합 크기보다 작을 수 있습니다. RowNumber가 0이면 행 집합의 모든 행에 작업이 적용됩니다.

SQLSetPos삭제 작업을 수행하면 데이터 원본이 선택한 테이블 행을 하나 이상 삭제합니다. SQLSetPos사용하여 행을 삭제하기 위해 애플리케이션은 작업이 SQL_DELETE 설정되고 RowNumber가 삭제할 행 수로 설정된 SQLSetPos를 호출합니다. RowNumber가 0이면 행 집합의 모든 행이 삭제됩니다.

SQLSetPos가 반환되면 삭제된 행은 현재 행이고 해당 상태는 SQL_ROW_DELETED. SQLGetData 또는 SQLSetPos 호출과 같은 추가 위치 작업에서는 행을 사용할 수 없습니다.

행 집합의 모든 행을 삭제하는 경우(RowNumber는 0과 같음) 애플리케이션은 SQLSetPos의 업데이트 작업 과 마찬가지로 행 작업 배열을 사용하여 드라이버가 특정 행을 삭제하지 못하도록 할 수 있습니다.

삭제되는 모든 행은 결과 집합에 있는 행이어야 합니다. 인출로 인해 애플리케이션 버퍼가 가득 차고 행 상태 배열이 유지되는 경우 이러한 각각의 행 위치에서 값은 SQL_ROW_DELETED, SQL_ROW_ERROR 또는 SQL_ROW_NOROW일 수 없습니다.

위치 지정 업데이트는 UPDATE, DELETE 및 INSERT 문에서 WHERE CURRENT OF 절을 사용하여 수행할 수도 있습니다. WHERE CURRENT OF에는 SQLGetCursorName 함수가 호출될 때 ODBC에서 생성하거나 SQLSetCursorName을 호출하여 지정할 수 있는 커서 이름이 필요합니다. 다음은 ODBC 애플리케이션에서 WHERE CURRENT OF 업데이트를 수행하는 데 사용되는 일반적인 단계입니다.

  • SQLSetCursorName을 호출하여 문 핸들의 커서 이름을 설정합니다.

  • FOR UPDATE OF 절을 사용하여 SELECT 문을 빌드하고 실행합니다.

  • SQLFetchScroll을 호출하여 행 집합 또는 SQLFetch를 검색하여 행을 검색합니다.

  • SQLSetPos(SQL_POSITION)를 호출하여 행에 커서를 배치합니다.

  • SQLSetCursorName으로 설정된 커서 이름을 사용하여 WHERE CURRENT OF 절로 UPDATE 문을 빌드하고 실행합니다.

또는 SELECT 문을 실행하기 전에 SQLSetCursorName을 호출하는 대신 SELECT 문을 실행한 후 SQLGetCursorName을 호출할 수 있습니다. SQLSetCursorName 을 사용하여 커서 이름을 설정하지 않으면 SQLGetCursorName은 ODBC에서 할당한 기본 커서 이름을 반환합니다.

SQLSetPos 는 서버 커서를 사용하는 경우 WHERE CURRENT OF보다 선호됩니다. ODBC 커서 라이브러리와 함께 업데이트할 수 있는 정적 커서를 사용하는 경우 커서 라이브러리는 기본 테이블의 키 값이 있는 WHERE 절을 추가하여 WHERE CURRENT OF 업데이트를 구현합니다. 이 경우 테이블의 키가 고유하지 않으면 불필요한 업데이트가 수행될 수 있습니다.

참고 항목

커서 사용(ODBC)