다음을 통해 공유


SQL Server 커서의 데이터 업데이트

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

OLE DB 드라이버 다운로드

SQL Server 커서를 통해 데이터를 가져오고 업데이트할 때 OLE DB Driver for SQL Server 소비자 애플리케이션은 다른 클라이언트 애플리케이션에 적용되는 동일한 고려 사항 및 제약 조건에 바인딩됩니다.

SQL Server 커서의 행만 동시 데이터 액세스 제어에 참여합니다. 소비자가 수정 가능한 행 집합을 요청하면 동시성 컨트롤이 DBPROP_LOCKMODE 의해 제어됩니다. 동시 액세스 제어 수준을 수정하기 위해 소비자는 행 집합을 열기 전에 DBPROP_LOCKMODE 속성을 설정합니다.

클라이언트 애플리케이션 설계를 통해 트랜잭션이 장기간 열린 상태로 유지되도록 하면 트랜잭션 격리 수준이 행 위치 지정에 상당한 지연을 일으킬 수 있습니다. 기본적으로 OLE DB Driver for SQL Server는 DBPROPVAL_TI_READCOMMITTED 지정된 커밋된 읽기 격리 수준을 사용합니다. OLE DB Driver for SQL Server는 행 집합 동시성이 읽기 전용인 경우 더티 읽기 격리를 지원합니다. 따라서 소비자는 수정이 가능한 행 집합에 더 높은 수준의 격리를 요청할 수 있지만 더 낮은 수준은 요청할 수 없습니다.

즉시 및 지연 업데이트 모드

즉시 업데이트 모드에서 IRowsetChange::SetData호출할 때마다 SQL Server로의 왕복이 발생합니다. 소비자가 단일 행을 여러 번 변경하는 경우 단일 SetData 호출을 사용하여 모든 변경 내용을 제출하는 것이 더 효율적입니다.

지연된 업데이트 모드에서는 IRowsetUpdate::Update의 cRows 및 rghRows 매개 변수에 표시된 각 행에 대해 SQL Server에 대한 왕복이 수행됩니다.

두 모드에서 라운드트립은 행 집합에 대해 열려 있는 트랜잭션 개체가 없는 경우 고유한 트랜잭션을 나타냅니다.

IRowsetUpdate::Update를 사용하면 OLE DB Driver for SQL Server가 지정된 각 행을 처리합니다. 모든 행의 잘못된 데이터, 길이 또는 상태 값으로 인해 발생하는 오류는 SQL Server용 OLE DB 드라이버 처리를 중지하지 않습니다. 업데이트에 참여하는 다른 행은 모두 또는 전혀 수정할 수 없습니다. SQL Server용 OLE DB 드라이버가 DB_S_ERRORSOCCURRED를 반환하면 소비자는 반환된 prgRowStatus 배열을 조사하여 문제가 발생한 행이 있는지 확인해야 합니다.

소비자는 행이 특정 순서로 처리된다고 가정해서는 안 됩니다. 소비자가 두 개 이상의 행에서 수정된 데이터를 순서대로 처리해야 하는 경우에는 애플리케이션 논리에서 이러한 순서를 설정하고 트랜잭션을 열어 여기에 프로세스를 넣어야 합니다.

참고 항목

행 집합에서 데이터 업데이트