테이블 반환 매개 변수에 데이터 삽입
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
OLE DB Driver for SQL Server는 소비자가 테이블 반환 매개 변수 행의 데이터를 지정하는 두 가지 모델로 밀어넣기 모델과 끌어오기 모델을 지원합니다.
참고 항목
테이블 반환 매개 변수 열에는 모든 행의 기본값이 아닌 값이나 모든 행의 기본값이 있어야 합니다. 일부 행에만 기본값이 있으면 안 됩니다. 따라서 테이블 반환 매개 변수 바인딩에서 테이블 반환 매개 변수 행 집합 열 데이터에 허용되는 유일한 상태 값은 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 메서드를 다음에 호출합니다.
OLE DB Driver for SQL Server에서 명령 실행을 시작하면 테이블 반환 매개 변수 값이 이 테이블 반환 매개 변수 행 집합 개체에서 가져와 서버로 전송됩니다.
푸시 모델에는 소비자가 최소한의 작업이 필요하지만 모든 테이블 반환 매개 변수 데이터가 실행 시 메모리에 있어야 하므로 끌어오기 모델보다 더 많은 메모리를 사용합니다.
끌어오기 모델(소비자로부터 요청 시 테이블 반환 매개 변수 데이터 가져오기)
끌어오기 모델은 다음과 같은 두 가지 경우에 유용합니다.
행을 스트리밍하려면
다른 공급자의 행 집합이 테이블 반환 매개 변수 값으로 사용되는 경우
끌어오기 모델에서는 소비자가 공급자에게 데이터를 요청 시 제공합니다. 애플리케이션에 많은 데이터 삽입이 있고 메모리의 테이블 반환 매개 변수 행 집합 데이터가 과도한 메모리 액세스를 초래하는 경우 이 방법을 사용합니다. 여러 OLE DB 공급자를 사용하는 경우 소비자 끌어오기 모델을 사용하면 소비자가 행 집합 개체를 테이블 반환 매개 변수 값으로 제공할 수 있습니다.
끌어오기 모델을 사용하려면 소비자가 행 집합 개체의 고유한 구현을 제공해야 합니다. 테이블 반환 매개 변수 행 집합(CLSID_ROWSET_TVP)과 함께 끌어오기 모델을 사용하는 경우 소비자는 공급자가 ITableDefinitionWithConstraints::CreateTableWithConstraints 메서드 또는 IOpenRowset::OpenRowset 메서드를 통해 노출하는 테이블 반환 매개 변수 행 집합 개체를 집계해야 합니다. 소비자 개체는 IRowset 인터페이스 구현만 재정의해야 합니다. 다음 함수는 사용자가 재정의해야 합니다.
IRowset::GetNextRows
IRowset::AddRefRows
IRowset::GetData
IRowset::ReleaseRows
IRowset::RestartPosition
OLE DB Driver for SQL Server는 소비자 행 집합 개체에서 테이블 반환 매개 변수의 스트리밍 동작을 지원하기 위해 한 번에 하나 이상의 행을 읽습니다. 예를 들어 사용자는 메모리가 아닌 디스크에 테이블 반환 매개 변수 행 집합 데이터가 있을 수 있으며 OLE DB Driver for SQL Server에 필요한 경우 디스크에서 데이터를 읽는 기능을 구현할 수 있습니다.
소비자는 테이블 반환 매개 변수 행 집합 개체에 대해 IAccessor::CreateAccessor를 사용하여 데이터 형식을 OLE DB Driver for SQL Server로 전달합니다. 소비자 버퍼에서 데이터를 읽을 때 공급자는 하나 이상의 접근자 핸들을 통해 쓰기 가능 열과 기본 열이 아닌 모든 열을 사용할 수 있는지 확인하고 해당 핸들을 사용하여 열 데이터를 읽습니다. 모호성을 방지하려면 테이블 반환 매개 변수 행 집합 열과 바인딩 사이에 일대일 대응이 있어야 합니다. 동일한 열에 바인딩을 복제하면 오류가 발생합니다. 또한 각 접근자에는 DBBindings의 iOrdinal 멤버가 순서대로 포함되어야 합니다. IRowset::GetData에 대한 호출은 행당 접근자 수만큼 많으며 호출 순서는 낮은 값에서 더 높은 값으로 iOrdinal 값의 순서를 기반으로 합니다.
공급자는 테이블 반환 매개 변수 행 집합 개체에 의해 노출되는 대부분의 인터페이스를 구현해야 합니다. 소비자는 최소 인터페이스(IRowset)를 사용하여 행 집합 개체를 구현합니다. 블라인드 집계로 인해 나머지 필수 행 집합 개체 인터페이스는 테이블 반환 매개 변수 행 집합 개체에 의해 구현됩니다.
OLE DB 공급자에 대해 가져온 행 집합 개체와 같은 다른 행 집합 개체의 경우 소비자 제공 행 집합은 OLE DB 사양에 지정된 대로 모든 필수 행 집합 개체 인터페이스를 구현해야 합니다.
실행 시 OLE DB Driver for SQL Server는 행 집합 개체를 다시 호출하여 행을 가져오고 열 데이터를 읽습니다.