SQL Server Native Client의 SQL Server 커서에서 데이터 업데이트
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
SQL Server 커서를 통해 데이터를 가져오고 업데이트할 때 SQL Server Native Client OLE DB 공급자 소비자 애플리케이션은 다른 클라이언트 애플리케이션에 적용되는 동일한 고려 사항 및 제약 조건에 바인딩됩니다.
SQL Server 커서의 행만 동시 데이터 액세스 제어에 참여합니다. 소비자가 수정 가능한 행 집합을 요청하면 동시성 컨트롤이 DBPROP_LOCKMODE 의해 제어됩니다. 동시 액세스 제어 수준을 수정하기 위해 소비자는 행 집합을 열기 전에 DBPROP_LOCKMODE 속성을 설정합니다.
클라이언트 애플리케이션 설계를 통해 트랜잭션이 장기간 열린 상태로 유지되도록 하면 트랜잭션 격리 수준이 행 위치 지정에 상당한 지연을 일으킬 수 있습니다. 기본적으로 SQL Server Native Client OLE DB 공급자는 DBPROPVAL_TI_READCOMMITTED 지정된 커밋된 읽기 격리 수준을 사용합니다. 행 집합 동시성이 읽기 전용인 경우 SQL Server Native Client OLE DB 공급자는 더티 읽기 격리를 지원합니다. 따라서 소비자는 수정이 가능한 행 집합에 더 높은 수준의 격리를 요청할 수 있지만 더 낮은 수준은 요청할 수 없습니다.
즉시 및 지연 업데이트 모드
즉시 업데이트 모드에서 IRowsetChange::SetData를 호출할 때마다 SQL Server로의 왕복이 발생합니다. 소비자가 단일 행을 여러 번 변경하는 경우 단일 SetData 호출을 사용하여 모든 변경 내용을 제출하는 것이 더 효율적입니다.
지연된 업데이트 모드에서는 IRowsetUpdate::Update의 cRows 및 rghRows 매개 변수에 표시된 각 행에 대해 SQL Server에 대한 왕복이 수행됩니다.
두 모드에서 라운드트립은 행 집합에 대해 열려 있는 트랜잭션 개체가 없는 경우 고유한 트랜잭션을 나타냅니다.
IRowsetUpdate::Update를 사용하는 경우 SQL Server Native Client OLE DB 공급자는 표시된 각 행을 처리하려고 합니다. 모든 행의 잘못된 데이터, 길이 또는 상태 값으로 인해 발생하는 오류는 SQL Server Native Client OLE DB 공급자 처리를 중지하지 않습니다. 업데이트에 참여하는 다른 행은 모두 또는 전혀 수정할 수 없습니다. 소비자는 반환된 prgRowStatus 배열을 검사하여 SQL Server Native Client OLE DB 공급자가 DB_S_ERRORSOCCURRED 반환할 때 특정 행에 대한 오류를 확인해야 합니다.
소비자는 행이 특정 순서로 처리된다고 가정해서는 안 됩니다. 소비자가 두 개 이상의 행에서 수정된 데이터를 순서대로 처리해야 하는 경우에는 애플리케이션 논리에서 이러한 순서를 설정하고 트랜잭션을 열어 여기에 프로세스를 넣어야 합니다.