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.
Important
Den här funktionen tas bort i en framtida version av Windows. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen. Microsoft rekommenderar att du använder drivrutinens markörfunktioner.
Markörbiblioteket stödjer positionerade uppdaterings- och borttagningssatser genom att ersätta WHERE CURRENT OF-klausulen i sådana satser med en WHERE-klausul som räknar upp värdena som lagras i dess cache för varje bunden kolumn. Markörbiblioteket skickar de nykonstruerade UPDATE och-satserna DELETE till drivrutinen för exekvering. För positionerade uppdateringssatser uppdaterar markörbiblioteket sedan sin cache från värdena i raduppsättningsbuffertarna och sätter motsvarande värde i radstatusarrayen till SQL_ROW_UPDATED. För positionerade delete-satser sätter den motsvarande värde i radstatusarrayen till SQL_ROW_DELETED.
Caution
WHERE-klausulen som konstrueras av markörbiblioteket för att identifiera den aktuella raden kan misslyckas med att identifiera några rader, identifiera en annan rad eller identifiera mer än en rad. För mer information, se Constructing Searched Statements, senare i detta appendix.
Positionerade uppdaterings- och borttagningssatser omfattas av följande begränsningar:
Positionerade update- och delete-satser kan endast användas i följande fall: när en SELECT-sats genererade resultatuppsättningen; när SELECT-satsen inte innehöll en join, en UNION-klausul eller en GROUP BY-klausul ; och när några kolumner som använde alias eller uttryck i select-listan inte var bundna med SQLBindCol.
Om en applikation förbereder en positionerad uppdatering eller delete-sats måste den göra det efter att den har anropat SQLFetch eller SQLFetchScroll. Även om markörbiblioteket skickar satsen till drivrutinen för förberedelse, stänger den satsen och kör den direkt när applikationen anropar SQLExecute.
Om drivrutinen endast stöder ett aktivt uttryck hämtar markörbiblioteket resten av resultatuppsättningen och refererar sedan den aktuella raduppsättningen från sin cache innan det utför en positionerad uppdaterings- eller borttagningssats. Om applikationen sedan anropar en funktion som returnerar metadata i en resultatmängd (till exempel SQLNumResultCols eller SQLDescribeCol), returnerar markörbiblioteket ett fel.
Om en positionerad uppdaterings- eller borttagningssats utförs på en kolumn i en tabell som innehåller en tidsstämpelkolumn som automatiskt uppdateras varje gång en uppdatering utförs, kommer alla efterföljande positionerade uppdaterings- eller borttagningssatser att misslyckas om tidsstämpelkolumnen är bunden. Detta sker eftersom den sökta update eller delete-satsen som markörbiblioteket skapar inte korrekt identifierar raden som ska uppdateras. Värdet i den sökta satsen för tidsstämpelkolumnen kommer inte att matcha det automatiskt uppdaterade värdet för tidsstämpelkolumnen.