Raduppsättningar och SQL Server-markörer (OLE DB-provider för intern klient)
gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
SQL Server returnerar resultatuppsättningar till konsumenter med två metoder:
Standardresultatuppsättningar som:
Minimera omkostnaderna.
Ge maximal prestanda vid hämtning av data.
Stöd endast för standardfunktionerna för framåtriktad, skrivskyddad markör.
Returnera rader till konsumenten en rad i taget.
Stöd endast för en aktiv instruktion i taget för en anslutning.
När en instruktion har körts kan inga andra instruktioner köras på anslutningen förrän alla resultat har hämtats av konsumenten eller om instruktionen har avbrutits.
Stöd för alla Transact-SQL-instruktioner.
Servermarkörer som:
Stöd för alla markörfunktioner.
Kan returnera rader till konsumenten.
Stöd för flera aktiva instruktioner för en enda anslutning.
Balansera markörens funktioner mot prestanda.
Stödet för markörfunktioner kan minska prestanda i förhållande till en standardresultatuppsättning. Detta kan förskjutas om konsumenten kan använda markörfunktioner för att hämta en mindre uppsättning rader.
Stöd inte för någon Transact-SQL-instruktion som returnerar mer än en enda resultatuppsättning.
Konsumenter kan begära olika markörbeteenden i en raduppsättning genom att ange vissa egenskaper för raduppsättningar. Om konsumenten inte anger någon av dessa raduppsättningsegenskaper eller anger alla till sina standardvärden implementerar SQL Server Native Client OLE DB-providern raduppsättningen med hjälp av en standardresultatuppsättning. Om någon av dessa egenskaper har angetts till ett annat värde än standardvärdet implementerar SQL Server Native Client OLE DB-providern raduppsättningen med hjälp av en servermarkör.
Följande egenskaper för raduppsättningen dirigerar SQL Server Native Client OLE DB-providern till att använda SQL Server-markörer. Vissa egenskaper kan kombineras på ett säkert sätt med andra. En raduppsättning som till exempel visar egenskaperna DBPROP_IRowsetScroll och DBPROP_IRowsetChange är en bokmärkesraduppsättning som uppvisar omedelbart uppdateringsbeteende. Andra egenskaper är ömsesidigt uteslutande. En raduppsättning som visar DBPROP_OTHERINSERT kan till exempel inte innehålla bokmärken.
Egenskaps-ID | Värde | Beteende för raduppsättning |
---|---|---|
DBPROP_SERVERCURSOR | VARIANT_TRUE | Det går inte att uppdatera SQL Server-data via raduppsättningen. Raduppsättningen är sekventiell och stöder endast framåtrullning och hämtning. Relativ radplacering stöds. Kommandotext kan innehålla en ORDER BY-sats. |
DBPROP_CANSCROLLBACKWARDS eller DBPROP_CANFETCHBACKWARDS | VARIANT_TRUE | Det går inte att uppdatera SQL Server-data via raduppsättningen. Raduppsättningen stöder rullning och hämtning i båda riktningarna. Relativ radplacering stöds. Kommandotext kan innehålla en ORDER BY-sats. |
DBPROP_BOOKMARKS eller DBPROP_LITERALBOOKMARKS | VARIANT_TRUE | Det går inte att uppdatera SQL Server-data via raduppsättningen. Raduppsättningen är sekventiell och stöder endast framåtrullning och hämtning. Relativ radplacering stöds. Kommandotext kan innehålla en ORDER BY-sats. |
DBPROP_OWNUPDATEDELETE eller DBPROP_OWNINSERT eller DBPROP_OTHERUPDATEDELETE | VARIANT_TRUE | Det går inte att uppdatera SQL Server-data via raduppsättningen. Raduppsättningen stöder rullning och hämtning i båda riktningarna. Relativ radplacering stöds. Kommandotext kan innehålla en ORDER BY-sats. |
DBPROP_OTHERINSERT | VARIANT_TRUE | Det går inte att uppdatera SQL Server-data via raduppsättningen. Raduppsättningen stöder rullning och hämtning i båda riktningarna. Relativ radplacering stöds. Kommandotext kan innehålla en ORDER BY-sats om det finns ett index i de refererade kolumnerna. DBPROP_OTHERINSERT kan inte VARIANT_TRUE om raduppsättningen innehåller bokmärken. Ett fel uppstår när du försöker skapa en raduppsättning med den här synlighetsegenskapen och bokmärkena. |
DBPROP_IRowsetLocate eller DBPROP_IRowsetScroll | VARIANT_TRUE | Det går inte att uppdatera SQL Server-data via raduppsättningen. Raduppsättningen stöder rullning och hämtning i båda riktningarna. Bokmärken och absolut placering via IRowsetLocate-gränssnittet stöds i raduppsättningen. Kommandotext kan innehålla en ORDER BY-sats. DBPROP_IRowsetLocate och DBPROP_IRowsetScroll kräver bokmärken i raduppsättningen. När du försöker skapa en raduppsättning med bokmärken och DBPROP_OTHERINSERT inställd på VARIANT_TRUE orsakar ett fel. |
DBPROP_IRowsetChange eller DBPROP_IRowsetUpdate | VARIANT_TRUE | Kan uppdatera SQL Server-data via raduppsättningen. Raduppsättningen är sekventiell och stöder endast framåtrullning och hämtning. Relativ radplacering stöds. Alla kommandon som stöder uppdateringsbara markörer kan stödja dessa gränssnitt. |
DBPROP_IRowsetLocate eller DBPROP_IRowsetScroll och DBPROP_IRowsetChange eller DBPROP_IRowsetUpdate | VARIANT_TRUE | Kan uppdatera SQL Server-data via raduppsättningen. Raduppsättningen stöder rullning och hämtning i båda riktningarna. Bokmärken och absolut placering via IRowsetLocate stöds i raduppsättningen. Kommandotext kan innehålla en ORDER BY-sats. |
DBPROP_IMMOBILEROWS | VARIANT_FALSE | Det går inte att uppdatera SQL Server-data via raduppsättningen. Raduppsättningen stöder endast framåtrullning. Relativ radplacering stöds. Kommandotext kan innehålla en ORDER BY-sats om det finns ett index i de refererade kolumnerna. DBPROP_IMMOBILEROWS är endast tillgängligt i raduppsättningar som kan visa SQL Server-rader som infogas med kommandon på andra sessioner eller av andra användare. Om du försöker öppna en raduppsättning med egenskapen inställd på VARIANT_FALSE på alla rader som DBPROP_OTHERINSERT inte kan VARIANT_TRUE orsakar ett fel. |
DBPROP_REMOVEDELETED | VARIANT_TRUE | Det går inte att uppdatera SQL Server-data via raduppsättningen. Raduppsättningen stöder endast framåtrullning. Relativ radplacering stöds. Kommandotext kan innehålla en ORDER BY-sats om den inte begränsas av en annan egenskap. |
En SQL Server Native Client OLE DB-providerraduppsättning som stöds av en servermarkör kan enkelt skapas i en SQL Server-bastabell eller vy med hjälp av metoden IOpenRowset::OpenRowset. Ange tabellen eller vyn efter namn och skicka de obligatoriska raduppsättningsegenskapsuppsättningarna i rgPropertySets parameter.
Kommandotext som skapar en raduppsättning begränsas när konsumenten kräver att raduppsättningen stöds av en servermarkör. Mer specifikt är kommandotexten begränsad till antingen en enskild SELECT-instruktion som returnerar ett resultat av en enskild raduppsättning eller en lagrad procedur som implementerar en enskild SELECT-instruktion som returnerar ett resultat av en enskild raduppsättning.
Dessa två tabeller visar mappningar av olika OLE DB-egenskaper och markörmodellerna. De visar också vilka raderuppsättningsegenskaper som ska anges för att använda en viss typ av markörmodell.
Varje cell i tabellen innehåller värdet för egenskapen rowset för den specifika markörmodellen. Datatypen för alla raduppsättningsegenskaper som anges tidigare i det här avsnittet är VT_BOOL och standardvärdet är VARIANT_FALSE. Följande symboler används i tabellen.
F = standardvärde (VARIANT_FALSE)
T = VARIANT_TRUE
- = VARIANT_TRUE eller VARIANT_FALSE
Om du vill använda en viss typ av markörmodell letar du upp kolumnen som motsvarar markörmodellen och letar upp alla raduppsättningsegenskaper med värdet "T" i kolumnen. Ange de här raduppsättningsegenskaperna till VARIANT_TRUE för att använda den specifika markörmodellen. Raduppsättningsegenskaperna med "-" som ett värde kan anges till antingen VARIANT_TRUE eller VARIANT_FALSE.
Egenskaper/markörmodeller för rader | Standard resultat ställa (RO) |
Snabb framåt- bara (RO) |
Statisk (RO) |
Nyckeluppsättning Driven (RO) |
---|---|---|---|---|
DBPROP_SERVERCURSOR | F | T | T | T |
DBPROP_DEFERRED | F | F | - | - |
DBPROP_IrowsetChange | F | F | F | F |
DBPROP_IrowsetLocate | F | F | - | - |
DBPROP_IrowsetScroll | F | F | - | - |
DBPROP_IrowsetUpdate | F | F | F | F |
DBPROP_BOOKMARKS | F | F | - | - |
DBPROP_CANFETCHBACKWARDS | F | F | - | - |
DBPROP_CANSCROLLBACKWARDS | F | F | - | - |
DBPROP_CANHOLDROWS | F | F | - | - |
DBPROP_LITERALBOOKMARKS | F | F | - | - |
DBPROP_OTHERINSERT | F | T | F | F |
DBPROP_OTHERUPDATEDELETE | F | T | F | T |
DBPROP_OWNINSERT | F | T | F | T |
DBPROP_OWNUPDATEDELETE | F | T | F | T |
DBPROP_QUICKSTART | F | F | - | - |
DBPROP_REMOVEDELETED | F | F | F | - |
DBPROP_IrowsetResynch | F | F | F | - |
DBPROP_CHANGEINSERTEDROWS | F | F | F | F |
DBPROP_SERVERDATAONINSERT | F | F | F | - |
DBPROP_UNIQUEROWS | - | F | F | F |
DBPROP_IMMOBILEROWS | - | - | - | T |
Egenskaper för rader/markörmodeller | Dynamisk (RO) | Nyckeluppsättning (R/W) | Dynamisk (R/W) |
---|---|---|---|
DBPROP_SERVERCURSOR | T | T | T |
DBPROP_DEFERRED | - | - | - |
DBPROP_IrowsetChange | F | - | - |
DBPROP_IrowsetLocate | F | - | F |
DBPROP_IrowsetScroll | F | - | F |
DBPROP_IrowsetUpdate | F | - | - |
DBPROP_BOOKMARKS | F | - | F |
DBPROP_CANFETCHBACKWARDS | - | - | - |
DBPROP_CANSCROLLBACKWARDS | - | - | - |
DBPROP_CANHOLDROWS | F | - | F |
DBPROP_LITERALBOOKMARKS | F | - | F |
DBPROP_OTHERINSERT | T | F | T |
DBPROP_OTHERUPDATEDELETE | T | T | T |
DBPROP_OWNINSERT | T | T | T |
DBPROP_OWNUPDATEDELETE | T | T | T |
DBPROP_QUICKSTART | - | - | - |
DBPROP_REMOVEDELETED | T | - | T |
DBPROP_IrowsetResynch | - | - | - |
DBPROP_CHANGEINSERTEDROWS | F | - | F |
DBPROP_SERVERDATAONINSERT | F | - | F |
DBPROP_UNIQUEROWS | F | F | F |
DBPROP_IMMOBILEROWS | F | T | F |
För en viss uppsättning raderuppsättningsegenskaper bestäms markörens modell som är vald på följande sätt.
Hämta en delmängd av egenskaperna som anges i föregående tabeller från den angivna samlingen med egenskaper för raduppsättningar. Dela upp dessa egenskaper i två undergrupper beroende på flaggans värde som krävs (T, F) eller valfri (-)-för varje raduppsättningsegenskap. För varje markörmodell börjar du i den första tabellen och går från vänster till höger. Jämför egenskapernas värden i de två undergrupperna med värdena för motsvarande egenskaper i kolumnen. Markörmodellen som inte har någon matchningsfel med de egenskaper som krävs och det minsta antalet matchningar med de valfria egenskaperna har valts. Om det finns fler än en markörmodell väljs den vänstra.
Blockstorlek för SQL Server-markör
När en SQL Server-markör stöder en SQL Server Native Client OLE DB-providerraduppsättning definierar antalet element i radreferensmatrisparametern för IRowset::GetNextRows eller IRowsetLocate::GetRowsAt metoder markörens blockstorlek. De rader som anges av handtagen i matrisen är medlemmar i markörblocket.
För rader som stöder bokmärken hanterar raden som hämtas med hjälp av metoden IRowsetLocate::GetRowsByBookmark-metoden definierar medlemmarna i markörblocket.
Oavsett vilken metod som används för att fylla i raduppsättningen och bilda SQL Server-markörblocket är markörblocket aktivt tills nästa radhämtningsmetod körs på raduppsättningen.