테이블 반환 매개 변수에 데이터 삽입(네이티브 클라이언트 OLE DB 공급자)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
SQL Server Native Client OLE DB 공급자는 소비자가 테이블 반환 매개 변수 행에 대한 데이터를 지정하는 푸시 모델과 끌어오기 모델의 두 가지 모델을 지원합니다.
참고 항목
테이블 반환 매개 변수 열에는 모든 행의 기본값이 아닌 값이나 모든 행의 기본값이 있어야 합니다. 일부 행에만 기본값이 있으면 안 됩니다. 따라서 테이블 반환 매개 변수 바인딩에서 테이블 반환 매개 변수 행 집합 열 데이터에 허용되는 유일한 상태 값은 DBSTATUS_S_ISNULL DBSTATUS_S_OK. DBSTATUS_S_DEFAULT 오류가 발생하며 바운드 상태 값은 DBSTATUS_E_BADSTATUS 설정됩니다.
푸시 모델(메모리의 모든 테이블 반환 매개 변수 데이터 로드)
푸시 모델은 매개 변수 집합(즉, ICommand::Execute의 DBPARAMS 매개 변수)의 사용과 유사합니다. 테이블 반환 매개 변수 행 집합 개체가 IRowset 인터페이스의 사용자 지정된 구현 없이 사용되는 경우에만 밀어넣기 모델이 사용됩니다. 테이블 반환 매개 변수 행 집합의 행 수가 적고 애플리케이션에 과도한 메모리 압력을 가하지 않을 경우 푸시 모델을 사용하는 것이 좋습니다. 이는 일반적인 OLE DB 애플리케이션에서 현재 일반적인 기능보다 소비자 애플리케이션에서 더 이상 기능이 필요하지 않으므로 끌어오기 모델보다 간단합니다.
소비자는 명령을 실행하기 전에 모든 테이블 반환 매개 변수 데이터를 공급자에게 제공해야 합니다. 데이터를 제공하기 위해 소비자는 각 테이블 반환 매개 변수에 대해 테이블 반환 매개 변수 행 집합 개체를 채웁니다. 테이블 반환 매개 변수 행 집합 개체는 소비자가 테이블 반환 매개 변수 데이터를 조작하는 데 사용할 행 집합 삽입, 설정 및 삭제 작업을 노출합니다. 공급자는 실행 시 테이블 반환 매개 변수 행 집합 개체에서 데이터를 가져옵니다.
테이블 반환 매개 변수 행 집합 개체가 소비자에게 제공되면 소비자는 이를 행 집합 개체로 처리할 수 있습니다. 소비자는 IColumnsInfo::GetColumnInfo 또는 IColumnsRowset::GetColumnsRowset 인터페이스 메서드를 사용하여 각 열(형식, 최대 길이, 전체 자릿수 및 소수 자릿수)의 형식 정보를 가져올 수 있습니다. 그런 다음 소비자는 데이터에 대한 바인딩을 지정하는 접근자를 만듭니다. 다음 단계는 테이블 반환 매개 변수 행 집합에 데이터 행을 삽입하는 것입니다. IRowsetChange::InsertRow를 사용하여 이 작업을 수행할 수 있습니다. 데이터를 조작해야 하는 경우 테이블 반환 매개 변수 행 집합 개체에서 IRowsetChange::SetData 또는 IRowsetChange::D eleteRows를 사용할 수도 있습니다. 테이블 반환 매개 변수 행 집합 개체는 스트림 개체와 유사하게 참조 계산됩니다.
IColumnsRowset::GetColumnsRowset를 사용하는 경우 결과 열의 행 집합 개체에 대해 IRowset::GetNextRows, IRowset::GetData 및 IRowset::ReleaseRows 메서드를 다음에 호출합니다.
SQL Server Native Client OLE DB 공급자가 명령 실행을 시작하면 테이블 반환 매개 변수 값이 이 테이블 반환 매개 변수 행 집합 개체에서 가져와서 서버로 전송됩니다.
푸시 모델에는 소비자가 최소한의 작업이 필요하지만 모든 테이블 반환 매개 변수 데이터가 실행 시 메모리에 있어야 하므로 끌어오기 모델보다 더 많은 메모리를 사용합니다.
끌어오기 모델(소비자로부터 요청 시 테이블 반환 매개 변수 데이터 가져오기)
끌어오기 모델은 다음과 같은 두 가지 경우에 유용합니다.
행을 스트리밍하려면
다른 공급자의 행 집합이 테이블 반환 매개 변수 값으로 사용되는 경우
끌어오기 모델에서는 소비자가 공급자에게 데이터를 요청 시 제공합니다. 애플리케이션에 많은 데이터 삽입이 있고 메모리의 테이블 반환 매개 변수 행 집합 데이터가 과도한 메모리 액세스를 초래하는 경우 이 방법을 사용합니다. 여러 OLE DB 공급자를 사용하는 경우 소비자 끌어오기 모델을 사용하면 소비자가 행 집합 개체를 테이블 반환 매개 변수 값으로 제공할 수 있습니다.
끌어오기 모델을 사용하려면 소비자가 행 집합 개체의 고유한 구현을 제공해야 합니다. 테이블 반환 매개 변수 행 집합(CLSID_ROWSET_TVP)과 함께 끌어오기 모델을 사용하는 경우 소비자는 공급자가 ITableDefinitionWithConstraints::CreateTableWithConstraints 메서드 또는 IOpenRowset::OpenRowset 메서드를 통해 노출하는 테이블 반환 매개 변수 행 집합 개체를 집계해야 합니다. 소비자 개체는 IRowset 인터페이스 구현만 재정의해야 합니다. 다음 함수는 사용자가 재정의해야 합니다.
IRowset::GetNextRows
IRowset::AddRefRows
IRowset::GetData
IRowset::ReleaseRows
IRowset::RestartPosition
SQL Server Native Client OLE DB 공급자는 소비자 행 집합 개체에서 테이블 반환 매개 변수의 스트리밍 동작을 지원하기 위해 한 번에 하나 이상의 행을 읽습니다. 예를 들어 사용자는 메모리가 아닌 디스크에 테이블 반환 매개 변수 행 집합 데이터가 있을 수 있으며 SQL Server Native Client OLE DB 공급자가 요구하는 경우 디스크에서 데이터를 읽는 기능을 구현할 수 있습니다.
소비자는 테이블 반환 매개 변수 행 집합 개체에서 IAccessor::CreateAccessor를 사용하여 데이터 형식을 SQL Server Native Client OLE DB Provider에 전달합니다. 소비자 버퍼에서 데이터를 읽을 때 공급자는 하나 이상의 접근자 핸들을 통해 쓰기 가능 열과 기본 열이 아닌 모든 열을 사용할 수 있는지 확인하고 해당 핸들을 사용하여 열 데이터를 읽습니다. 모호성을 방지하려면 테이블 반환 매개 변수 행 집합 열과 바인딩 사이에 일대일 대응이 있어야 합니다. 동일한 열에 바인딩을 복제하면 오류가 발생합니다. 또한 각 접근자에는 DBBindings의 iOrdinal 멤버가 순서대로 포함되어야 합니다. IRowset::GetData에 대한 호출은 행당 접근자 수만큼 많으며 호출 순서는 낮은 값에서 더 높은 값으로 iOrdinal 값의 순서를 기반으로 합니다.
공급자는 테이블 반환 매개 변수 행 집합 개체에 의해 노출되는 대부분의 인터페이스를 구현해야 합니다. 소비자는 최소 인터페이스(IRowset)를 사용하여 행 집합 개체를 구현합니다. 블라인드 집계로 인해 나머지 필수 행 집합 개체 인터페이스는 테이블 반환 매개 변수 행 집합 개체에 의해 구현됩니다.
OLE DB 공급자에 대해 가져온 행 집합 개체와 같은 다른 행 집합 개체의 경우 소비자 제공 행 집합은 OLE DB 사양에 지정된 대로 모든 필수 행 집합 개체 인터페이스를 구현해야 합니다.
실행 시 SQL Server Native Client OLE DB 공급자는 행 집합 개체를 다시 호출하여 행을 가져오고 열 데이터를 읽습니다.