Delen via


Rijensets en SQL Server-cursors (systeemeigen OLE DB-provider van client)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQL Server retourneert resultatensets aan consumenten met behulp van twee methoden:

  • Standaardresultatensets die:

    • Minimaliseer overhead.

    • Bied maximale prestaties bij het ophalen van gegevens.

    • Alleen de standaardfunctie voor alleen-doorstuurservers en alleen-lezen cursors ondersteunen.

    • Retourneert rijen naar de consument één rij tegelijk.

    • Ondersteuning voor slechts één actieve instructie tegelijk voor een verbinding.

      Nadat een instructie is uitgevoerd, kunnen er geen andere instructies worden uitgevoerd op de verbinding totdat alle resultaten zijn opgehaald door de consument of de instructie is geannuleerd.

    • Alle Transact-SQL instructies ondersteunen.

  • Servercursors die:

    • Ondersteuning voor alle cursorfunctionaliteit.

    • Kan rijen aan de consument retourneren.

    • Ondersteuning voor meerdere actieve instructies voor één verbinding.

    • Plaats de cursorfunctionaliteit op basis van prestaties.

      De ondersteuning voor cursorfunctionaliteit kan de prestaties verlagen ten opzichte van een standaardresultatenset. Dit kan worden verschoven als de consument cursorfunctionaliteit kan gebruiken om een kleinere set rijen op te halen.

    • Geen ondersteuning voor een Transact-SQL instructie die meer dan één resultatenset retourneert.

Consumenten kunnen verschillende cursorgedrag in een rijset aanvragen door bepaalde eigenschappen van de rijenset in te stellen. Als de consument geen van deze rijseteigenschappen instelt of deze allemaal instelt op de standaardwaarden, implementeert de OLE DB-provider van de SQL Server Native Client de rijenset met behulp van een standaardresultatenset. Als een van deze eigenschappen is ingesteld op een andere waarde dan de standaardwaarde, implementeert de OLE DB-provider van sql Server Native Client de rijenset met behulp van een servercursor.

Met de volgende rijenseteigenschappen wordt de OLE DB-provider van sql Server Native Client gebruikt om SQL Server-cursors te gebruiken. Sommige eigenschappen kunnen veilig worden gecombineerd met anderen. Een rijset die bijvoorbeeld de eigenschappen van de DBPROP_IRowsetScroll en DBPROP_IRowsetChange vertoont, is een bladwijzerrijset die direct updategedrag vertoont. Andere eigenschappen sluiten elkaar wederzijds uit. Een rijset met DBPROP_OTHERINSERT kan bijvoorbeeld geen bladwijzers bevatten.

Eigenschaps-id Waarde Gedrag van rijenset
DBPROP_SERVERCURSOR VARIANT_TRUE Kan SQL Server-gegevens niet bijwerken via de rijenset. De rijenset is sequentieel, ondersteunt alleen vooruit schuiven en ophalen. Relatieve rijpositie wordt ondersteund. Opdrachttekst kan een ORDER BY-component bevatten.
DBPROP_CANSCROLLBACKWARDS of DBPROP_CANFETCHBACKWARDS VARIANT_TRUE Kan SQL Server-gegevens niet bijwerken via de rijenset. De rijenset ondersteunt schuiven en ophalen in beide richtingen. Relatieve rijpositie wordt ondersteund. Opdrachttekst kan een ORDER BY-component bevatten.
DBPROP_BOOKMARKS of DBPROP_LITERALBOOKMARKS VARIANT_TRUE Kan SQL Server-gegevens niet bijwerken via de rijenset. De rijenset is sequentieel, ondersteunt alleen vooruit schuiven en ophalen. Relatieve rijpositie wordt ondersteund. Opdrachttekst kan een ORDER BY-component bevatten.
DBPROP_OWNUPDATEDELETE of DBPROP_OWNINSERT of DBPROP_OTHERUPDATEDELETE VARIANT_TRUE Kan SQL Server-gegevens niet bijwerken via de rijenset. De rijenset ondersteunt schuiven en ophalen in beide richtingen. Relatieve rijpositie wordt ondersteund. Opdrachttekst kan een ORDER BY-component bevatten.
DBPROP_OTHERINSERT VARIANT_TRUE Kan SQL Server-gegevens niet bijwerken via de rijenset. De rijenset ondersteunt schuiven en ophalen in beide richtingen. Relatieve rijpositie wordt ondersteund. Opdrachttekst kan een ORDER BY-component bevatten als er een index bestaat in de kolommen waarnaar wordt verwezen.

DBPROP_OTHERINSERT kan niet worden VARIANT_TRUE als de rijenset bladwijzers bevat. Als u een rijenset probeert te maken met deze zichtbaarheidseigenschap en bladwijzers, treedt er een fout op.
DBPROP_IRowsetLocate of DBPROP_IRowsetScroll VARIANT_TRUE Kan SQL Server-gegevens niet bijwerken via de rijenset. De rijenset ondersteunt schuiven en ophalen in beide richtingen. Bladwijzers en absolute positionering via de interface IRowsetLocate worden ondersteund in de rijenset. Opdrachttekst kan een ORDER BY-component bevatten.

DBPROP_IRowsetLocate en DBPROP_IRowsetScroll bladwijzers in de rijenset vereisen. Er wordt geprobeerd een rijenset te maken met bladwijzers en DBPROP_OTHERINSERT ingesteld op VARIANT_TRUE een fout veroorzaakt.
DBPROP_IRowsetChange of DBPROP_IRowsetUpdate VARIANT_TRUE Kan SQL Server-gegevens bijwerken via de rijenset. De rijenset is sequentieel, ondersteunt alleen vooruit schuiven en ophalen. Relatieve rijpositie wordt ondersteund. Alle opdrachten die ondersteuning bieden voor updatable cursors, kunnen deze interfaces ondersteunen.
DBPROP_IRowsetLocate of DBPROP_IRowsetScroll en DBPROP_IRowsetChange of DBPROP_IRowsetUpdate VARIANT_TRUE Kan SQL Server-gegevens bijwerken via de rijenset. De rijenset ondersteunt schuiven en ophalen in beide richtingen. Bladwijzers en absolute positionering via IRowsetLocate worden ondersteund in de rijenset. Opdrachttekst kan een ORDER BY-component bevatten.
DBPROP_IMMOBILEROWS VARIANT_FALSE Kan SQL Server-gegevens niet bijwerken via de rijenset. De rijenset ondersteunt alleen vooruit schuiven. Relatieve rijpositie wordt ondersteund. Opdrachttekst kan een ORDER BY-component bevatten als er een index bestaat in de kolommen waarnaar wordt verwezen.

DBPROP_IMMOBILEROWS is alleen beschikbaar in rijensets waarmee SQL Server-rijen kunnen worden weergegeven die zijn ingevoegd door opdrachten in andere sessies of door andere gebruikers. Als u een rijset probeert te openen waarbij de eigenschap is ingesteld op VARIANT_FALSE op een rijset waarvoor DBPROP_OTHERINSERT niet kan worden VARIANT_TRUE een fout veroorzaakt.
DBPROP_REMOVEDELETED VARIANT_TRUE Kan SQL Server-gegevens niet bijwerken via de rijenset. De rijenset ondersteunt alleen vooruit schuiven. Relatieve rijpositie wordt ondersteund. Opdrachttekst kan een ORDER BY-component bevatten, tenzij deze is beperkt door een andere eigenschap.

Een rijenset van een SQL Server Native Client OLE DB-provider die wordt ondersteund door een servercursor, kan eenvoudig worden gemaakt in een SQL Server-basistabel of -weergave met behulp van de methode IOpenRowset::OpenRowset. Geef de tabel of weergave op naam op, waarbij de vereiste set rijensets worden doorgegeven in de parameter rgPropertySets.

Opdrachttekst waarmee een rijenset wordt gemaakt, wordt beperkt wanneer de consument vereist dat de rijenset wordt ondersteund door een servercursor. De opdrachttekst is met name beperkt tot één SELECT-instructie die één resultaat van een rijset retourneert of een opgeslagen procedure waarmee één SELECT-instructie wordt geïmplementeerd die één rijsetresultaat retourneert.

In deze twee tabellen worden de toewijzingen van verschillende OLE DB-eigenschappen en de cursormodellen weergegeven. Ze laten ook zien welke rijseteigenschappen moeten worden ingesteld om een bepaald type cursormodel te gebruiken.

Elke cel in de tabel bevat een waarde van de rijseteigenschap voor het specifieke cursormodel. Het gegevenstype van alle rijseteigenschappen die eerder in dit onderwerp worden vermeld, is VT_BOOL en de standaardwaarde is VARIANT_FALSE. De volgende symbolen worden gebruikt in de tabel.

F = standaardwaarde (VARIANT_FALSE)

T = VARIANT_TRUE

- = VARIANT_TRUE of VARIANT_FALSE

Als u een bepaald type cursormodel wilt gebruiken, zoekt u de kolom die overeenkomt met het cursormodel en zoekt u alle eigenschappen van de rijenset met de waarde T in de kolom. Stel deze rijseteigenschappen in op VARIANT_TRUE om het specifieke cursormodel te gebruiken. De eigenschappen van de rijenset met '-' als een waarde kunnen worden ingesteld op VARIANT_TRUE of VARIANT_FALSE.

Rijseteigenschappen/cursormodellen Verstek

resultaat

set

(RO)
Snel

voorwaarts-

alleen

(RO)
Statisch

(RO)
Keyset

Gedreven

(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
Eigenschappen van rijenset/Cursormodellen Dynamisch (RO) Keyset (R/W) Dynamisch (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

Voor een bepaalde set rijseteigenschappen wordt het geselecteerde cursormodel als volgt bepaald.

Haal uit de opgegeven verzameling rijenseteigenschappen een subset van eigenschappen op die in de vorige tabellen worden vermeld. Verdeel deze eigenschappen in twee subgroepen, afhankelijk van de vlagwaarde die is vereist (T, F) of optionele (-)-van elke rijseteigenschap. Voor elk cursormodel begint u in de eerste tabel en gaat u van links naar rechts. Vergelijk de waarden van de eigenschappen in de twee subgroepen met de waarden van de bijbehorende eigenschappen in die kolom. Het cursormodel dat niet overeenkomt met de vereiste eigenschappen en het minste aantal niet-overeenkomende eigenschappen met de optionele eigenschappen is geselecteerd. Als er meer dan één cursormodel is, wordt het meest links gekozen.

Blokgrootte van SQL Server-cursor

Wanneer een SQL Server-cursor ondersteuning biedt voor een rijenset van de SQL Server Native Client OLE DB-provider, definieert het aantal elementen in de rijmatrixparameter van de IRowset::GetNextRows of de IRowsetLocate::GetRowsAt-methoden de grootte van de cursorblok. De rijen die door de ingangen in de matrix worden aangegeven, zijn de leden van het cursorblok.

Voor rijensets die bladwijzers ondersteunen, definiëren de rijgrepen die worden opgehaald met behulp van de IRowsetLocate::GetRowsByBookmark methode de leden van het cursorblok.

Ongeacht de methode die wordt gebruikt om de rijenset te vullen en het SQL Server-cursorblok te vormen, is het cursorblok actief totdat de volgende methode voor het ophalen van rijen wordt uitgevoerd op de rijenset.

Zie ook

rijensets