Kommentar
Å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
Även om konsumenter kan tillhandahålla vilket radsetobjekt som helst för tabellvärda parametrar, implementeras typiska radsetsobjekt mot backend-datalagringar och ger därför begränsad prestanda. Av denna anledning möjliggör SQL Server Native Client OLE DB Provider konsumenter att skapa ett specialiserat radsetsobjekt ovanpå minnesdata. Detta speciella, minnesinbyggda radmängdobjekt är ett nytt COM-objekt kallat en tabellvärd parameterradmängd . Den erbjuder funktionalitet liknande parameteruppsättningar.
Tabellvärda parameter-raduppsättningsobjekt skapas explicit av konsumenten för inmatningsparametrar via flera sessionsnivågränssnitt. Det finns en instans av ett tabellvärd parameter radsetobjekt per tabellvärd parameter. Konsumenten kan skapa tabellvärda parameterraduppsättningsobjekten antingen genom att tillhandahålla metadatainformation som redan är känd (statiskt scenario), eller genom att upptäcka den via leverantörsgränssnitt (dynamiskt scenario). Följande avsnitt beskriver dessa två scenarier.
Statiskt scenario
När typinformationen är känd använder konsumenten ITableDefinitionWithConstraints::CreateTableWithConstraints för att instansiera ett tabellvärd parameterraduppsättningsobjekt som motsvarar en tabellvärd parameter.
Guidfältet (pTableID-parametern) innehåller den speciella GUID (CLSID_ROWSET_TVP). PwszName-medlemmen innehåller namnet på den tabellvärda parametertypen som konsumenten vill instansiera. eKind-fältet kommer att ställas in på DBKIND_GUID_NAME. Detta namn krävs när satsen är ad hoc SQL; namnet är valfritt om det är ett proceduranrop.
För aggregering skickar konsumenten pUnkOuter-parametern med styrande IUnknown.
Tabellvärdesparametrens radsetsobjektsegenskaper är skrivskyddade, så konsumenten förväntas inte sätta några egenskaper i rgPropertySets.
För medlemmen rgPropertySets i varje DBCOLUMNDESC-struktur kan konsumenten ange ytterligare egenskaper för varje kolumn. Dessa egenskaper tillhör DBPROPSET_SQLSERVERCOLUMN egenskapsmängden. De gör det möjligt att ange beräknade och standardinställningar för varje kolumn. De stöder också befintliga kolumnegenskaper, såsom nullbarhet och identitet.
För att hämta motsvarande information från ett tabellvärd parameterradmängdobjekt använder konsumenten IRowsetInfo::GetProperties.
För att hämta information om null, unik, beräknad och uppdateringsstatus för varje kolumn använder konsumenten IColumnsRowset::GetColumnsRowset eller IColumnsInfo::GetColumnInfo. Dessa metoder ger detaljerad information om varje tabellvärd parameterraduppsättningskolumn.
Konsumenten specificerar typen av varje kolumn i den tabellvärda parametern. Detta liknar hur kolumner specificeras när en tabell skapas i SQL Server. Konsumenten får ett tabellvärd parameter-radsetobjekt från SQL Server Native Client OLE DB Provider via ppRowset-utgångsparametern.
Dynamiskt scenario
När konsumenten inte har typinformation bör den använda IOpenRowset::OpenRowset för att instansiera tabellvärda parameter-radsetobjekt. Allt konsumenten behöver ge leverantören är typnamnet.
I detta scenario erhåller leverantören typinformation om ett tabellvärd parameter-radsetobjekt från servern på konsumentens vägnar.
pTableID- och pUnkOuter-parametrarna bör sättas som i det statiska scenariot. SQL Server Native Client OLE DB Provider hämtar sedan typinformationen (kolumninformation och begränsningar) från servern och returnerar ett tabellvärd parameter-radsetobjekt via ppRowset-parametern. Denna operation kräver kommunikation med servern och fungerar därför inte lika bra som det statiska scenariot. Det dynamiska scenariot fungerar endast med parameteriserade proceduranrop.