Zpracování pozičních příkazů Update a Delete

Important

Tato funkce se odebere v budoucí verzi Windows. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají. Microsoft doporučuje používat funkci kurzoru ovladače.

Knihovna kurzorů podporuje umístěné příkazy update a delete tím, že v takových příkazech nahrazuje klauzuli WHERE CURRENT OF klauzulí WHERE , která vyjmenovává hodnoty uložené v cache pro každý vázaný sloupec. Knihovna kurzorů předává nově vytvořené UPDATE příkazy a DELETE ovladači k vykonání. Pro dotazníky s umístěnými aktualizacemi pak knihovna kurzorů aktualizuje svou cache z hodnot v bufferech řádků a nastaví odpovídající hodnotu v poli stavů řádků na SQL_ROW_UPDATED. Pro příkazy pro umístění delete nastaví odpovídající hodnotu v řádkovém stavovém poli na SQL_ROW_DELETED.

Caution

Klauzule WHERE vytvořená kurzorovou knihovnou pro identifikaci aktuálního řádku může selhat v identifikaci žádných řádků, jiného řádku nebo více než jednoho řádku. Pro více informací viz Konstruování vyhledávaných tvrzení, později v této příloze.

Pozice příkazů aktualizace a smazání podléhají následujícím omezením:

  • Příkazy pro pozicování update a delete lze použít pouze v následujících případech: když příkaz SELECT generuje výslednou sadu; když příkaz SELECT neobsahoval join, klauzuli UNION nebo klauzuli GROUP BY ; a když žádné sloupce, které používaly alias nebo výraz v seznamu výběru, nebyly vázány SQLBindCol.

  • Pokud aplikace připraví příkaz pro umístění aktualizace nebo odstranění, musí tak učinit poté, co zavolá SQLFetch nebo SQLFetchScroll. Ačkoli knihovna kurzorů odešle příkaz ovladači k přípravě, příkaz ukončí a vykoná ho přímo, když aplikace volá SQLExecute.

  • Pokud ovladač podporuje pouze jeden aktivní příkaz, knihovna kurzoru načte zbytek výsledkové sady a poté znovu načte aktuální sadu řádků ze své cache před vykonáním příkazu pro aktualizaci nebo odstranění pozice. Pokud aplikace poté zavolá funkci, která vrací metadata v sadě výsledků (například SQLNumResultCols nebo SQLDescribeCol), knihovna kurzoru vrátí chybu.

  • Pokud je umístěný příkaz update nebo delete proveden na sloupci tabulky, která obsahuje sloupec časového razítka, jenž se automaticky aktualizuje při každé aktualizaci, všechny následné příkazy pro aktualizaci nebo odstranění s pozicemi selžou, pokud je sloupec časového razítka omezen. K tomu dochází proto, že vyhledáný příkaz update nebo delete, který knihovna kurzoru vytvoří, neidentifikuje přesně řádek k aktualizaci. Hodnota ve vyhledávaném příkazu pro sloupec časového razítka nebude odpovídat automaticky aktualizované hodnotě sloupce časového razítka.