Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-databas i Microsoft Fabric
OLE DB-drivrutinen för SQL Server stöder två modeller för konsumenten att specificera data för tabellvärda parameterrader: en push-modell och en pull-modell.
Anmärkning
En tabellvärd parameterkolumn måste ha antingen icke-standardvärden i alla rader eller standardvärden i alla rader. Det är inte möjligt att ha standardvärden i vissa rader men inte i andra. Därför är de enda statusvärden som tillåts för tabellvärda parameterraduppsättningsdata DBSTATUS_S_ISNULL och DBSTATUS_S_OK i tabellvärda parameterbindningar. DBSTATUS_S_DEFAULT kommer att resultera i ett fel och det bundna statusvärdet sätts till DBSTATUS_E_BADSTATUS.
Push-modell (laddar all parameterdata Table-Valued minnet)
Push-modellen liknar användningen av parameteruppsättningar (det vill säga DBPARAMS-parametern i ICommand::Execute). Push-modellen används endast om tabellvärda parameter-radsetobjekt används utan en anpassad implementation av IRowset-gränssnitt. Push-modellen rekommenderas när antalet rader i tabellvärda parameterraduppsättningen är litet och inte förväntas lägga för överdrivet minnestryck på applikationen. Detta är enklare än pull-modellen, eftersom den inte kräver mer funktionalitet från konsumentapplikationen än vad som för närvarande är vanligt i typiska OLE DB-applikationer.
Konsumenten förväntas tillhandahålla all tabellvärd parameterdata till leverantören innan ett kommando exekveras. För att tillhandahålla data fyller konsumenten i ett tabellvärd parameter-radsetsobjekt för varje tabellvärd parameter. Tabellvärda parameter-radsetobjektet exponerar radset-insert-, set- och delete-operationer, vilka konsumenten använder för att manipulera tabellvärdesparameterdata. Leverantören hämtar data från detta tabellvärda parameter-radsetobjekt vid exekveringstidpunkten.
När ett tabellvärd parameter-radsetobjekt tillhandahålls konsumenten kan konsumenten bearbeta det som ett radmängdsobjekt. Konsumenten kan erhålla typinformationen för varje kolumn (typ, maximal längd, precision och skala) genom att använda IColumnsInfo::GetColumnInfo eller IColumnsRowset::GetColumnsRowset-gränssnittsmetoden. Konsumenten skapar sedan en accessor för att specificera bindningarna för datan. Nästa steg är att infoga datarader i tabellvärda parameterraduppsättningen. Detta kan göras genom att använda IRowsetChange::InsertRow. IRowsetChange::SetData eller IRowsetChange::D eleteRows kan också användas på tabellvärda parameter-radsetobjektet om du måste manipulera datan. Tabellvärda parameterraduppsättningsobjekt räknas som referens, likt strömobjekt.
Om IColumnsRowset::GetColumnsRowset används kommer det att finnas efterföljande anrop till IRowset::GetNextRows, IRowset::GetData och IRowset::ReleaseRows-metoderna på radsetsobjektet i den resulterande kolumnen.
Efter att OLE DB-drivrutinen för SQL Server börjar köra kommandot, hämtas tabellvärden från detta tabellvärda parameterraduppsättningsobjekt och skickas till servern.
Push-modellen kräver minimalt arbete från konsumenten, men använder mer minne än pull-modellen, eftersom all tabellvärd parameterdata måste finnas i minnet vid exekveringstillfället.
Pull-modell (Erhålla Table-Valued parameterdata på begäran från konsumenten)
Pull-modellen är användbar för två scenarier:
Att streama rader.
Om en radmängd från en annan leverantör används som tabellvärd parametervärde.
I pull-modellen tillhandahåller konsumenten data på begäran till leverantören. Använd denna metod om din applikation har många datainsättningar, och tabellvärda parameterraduppsättningsdata i minnet skulle resultera i överdriven minnesåtkomst. Om flera OLE DB-leverantörer används möjliggör konsumentens pull-modell att konsumenten kan tillhandahålla vilket radsetsobjekt som helst som tabellvärd parametervärde.
För att använda pull-modellen måste konsumenter tillhandahålla sin egen implementation av ett radsetobjekt. När pullmodellen används med tabellvärda parameterradmängder (CLSID_ROWSET_TVP) krävs det att konsumenten aggregerar det tabellvärda parameterraduppsättningsobjektet som leverantören exponerar via metoden ITableDefinitionWithConstraints::CreateTableWithConstraints eller metoden IOpenRowset::OpenRowset. Konsumentobjektet förväntas endast åsidosätta IRowset-gränssnittets implementation. Du måste åsidosätta följande funktioner:
IRowset::GetNextRows
IRowset::AddRefRows
IRowset::GetData
IRowset::ReleaseRows
IRowset::OmstartPosition
OLE DB-drivrutinen för SQL Server läser en eller flera rader åt gången från konsumentens raduppsättningsobjekt för att stödja strömningsbeteende i tabellvärda parametrar. Till exempel kan användaren ha tabellvärda parametern raduppsättningsdata på disken (inte i minnet) och implementera funktionaliteten att läsa data från disken när det krävs av OLE DB-drivrutinen för SQL Server.
Konsumenten kommunicerar sitt dataformat till OLE DB-drivrutinen för SQL Server genom att använda IAccessor::CreateAccessor på tabellvärda parametern rowset-objektet. När data från konsumentbufferten läses kontrollerar leverantören att alla skrivbara och icke-standardkolumner är tillgängliga via minst en accessorhand, och använder motsvarande handtag för att läsa kolumndata. För att undvika tvetydighet bör det finnas en en-till-en-korrespondens mellan en tabellvärd parameterraduppsättningskolumn och en bindning. Dubbletter av bindningar till samma kolumn kommer att resultera i ett fel. Dessutom förväntas varje accessor ha iOrdinal-leden av DBBindings i sekvens. Det kommer att finnas lika många anrop till IRowset::GetData som antalet accessorer per rad, och ordningen på anropen kommer att baseras på ordningen av iOrdinal-värdet från lägre till högre värden.
Leverantören förväntas implementera de flesta av gränssnitten som exponeras av tabellvärda parametern rowset-objektet. Konsumenten implementerar ett radsetobjekt med minimala gränssnitt (IRowset). På grund av blind aggregering kommer de återstående obligatoriska radsetsobjektgränssnitten att implementeras av tabellvärda parametern rowset-objektet.
För alla andra raduppsättningsobjekt, såsom raduppsättningsobjekt som erhålls för någon OLE DB-leverantör, måste den konsumenttillhandahållna raduppsättningen implementera alla obligatoriska radsetobjektgränssnitt enligt OLE DB-specifikationen.
Vid körningen kommer OLE DB-drivrutinen för SQL Server att anropa tillbaka till radset-objektet för att hämta rader och läsa kolumndata.
Se även
Table-Valued Parametrar (OLE DB)
Använd Table-Valued parametrar (OLE DB)