Sady řádků a kurzory SQL Serveru
platí pro:SQL ServerAzure SQL Databaseazure SQL Managed InstanceAzure Synapse AnalyticsPlatform Platform System (PDW)
SQL Server vrátí uživatelům sady výsledků pomocí dvou metod:
Výchozí sady výsledků:
Minimalizujte režii.
Zajištění maximálního výkonu při načítání dat.
Podporuje pouze výchozí funkci kurzoru jen pro čtení.
Vrátí řádky příjemci po jednom řádku.
Podpora pouze jednoho aktivního příkazu najednou u připojení.
Po provedení příkazu se v připojení nedají spustit žádné další příkazy, dokud příjemce nenačte všechny výsledky nebo se příkaz zruší.
Podporují všechny příkazy Transact-SQL.
Kurzory serveru, které:
Podporuje všechny funkce kurzoru.
Může vrátit bloky řádků příjemci.
Podpora více aktivních příkazů v jednom připojení.
Vyvážení funkcí kurzoru proti výkonu
Podpora funkcí kurzoru může snížit výkon vzhledem k výchozí sadě výsledků. To může být posun, pokud příjemce může použít funkci kurzoru k načtení menší sady řádků.
Nepodporuje žádný příkaz Transact-SQL, který vrací více než jednu sadu výsledků.
Spotřebitelé mohou požadovat různé chování kurzoru v sadě řádků nastavením určitých vlastností sady řádků. Pokud příjemce nenastaví žádnou z těchto vlastností sady řádků nebo je nastaví všechny na výchozí hodnoty, ovladač OLE DB pro SQL Server implementuje sadu řádků pomocí výchozí sady výsledků. Pokud je některá z těchto vlastností nastavena na jinou hodnotu než výchozí, ovladač OLE DB pro SQL Server implementuje sadu řádků pomocí kurzoru serveru.
Následující vlastnosti sady řádků nasměrují ovladač OLE DB pro SQL Server tak, aby používal kurzory SYSTÉMU SQL Server. Některé vlastnosti se dají bezpečně kombinovat s jinými. Například sada řádků, která vykazuje DBPROP_IRowsetScroll a DBPROP_IRowsetChange vlastnosti, bude sada řádků záložek, která vykazuje okamžité chování aktualizace. Ostatní vlastnosti se vzájemně vylučují. Například sada řádků, která vykazuje DBPROP_OTHERINSERT nemůže obsahovat záložky.
ID vlastnosti | Hodnota | Chování sady řádků |
---|---|---|
DBPROP_SERVERCURSOR | VARIANT_TRUE | Data SQL Serveru nelze aktualizovat prostřednictvím sady řádků. Sada řádků je sekvenční a podporuje posouvání vpřed a načítání pouze. Podporuje se relativní umístění řádků. Text příkazu může obsahovat klauzuli ORDER BY. |
DBPROP_CANSCROLLBACKWARDS nebo DBPROP_CANFETCHBACKWARDS | VARIANT_TRUE | Data SQL Serveru nelze aktualizovat prostřednictvím sady řádků. Sada řádků podporuje posouvání a načítání v obou směrech. Podporuje se relativní umístění řádků. Text příkazu může obsahovat klauzuli ORDER BY. |
DBPROP_BOOKMARKS nebo DBPROP_LITERALBOOKMARKS | VARIANT_TRUE | Data SQL Serveru nelze aktualizovat prostřednictvím sady řádků. Sada řádků je sekvenční a podporuje posouvání vpřed a načítání pouze. Podporuje se relativní umístění řádků. Text příkazu může obsahovat klauzuli ORDER BY. |
DBPROP_OWNUPDATEDELETE nebo DBPROP_OWNINSERT nebo DBPROP_OTHERUPDATEDELETE | VARIANT_TRUE | Data SQL Serveru nelze aktualizovat prostřednictvím sady řádků. Sada řádků podporuje posouvání a načítání v obou směrech. Podporuje se relativní umístění řádků. Text příkazu může obsahovat klauzuli ORDER BY. |
DBPROP_OTHERINSERT | VARIANT_TRUE | Data SQL Serveru nelze aktualizovat prostřednictvím sady řádků. Sada řádků podporuje posouvání a načítání v obou směrech. Podporuje se relativní umístění řádků. Text příkazu může obsahovat klauzuli ORDER BY, pokud na odkazovaných sloupcích existuje index. DBPROP_OTHERINSERT nelze VARIANT_TRUE, pokud sada řádků obsahuje záložky. Při pokusu o vytvoření sady řádků s touto vlastností viditelnosti a záložkami dojde k chybě. |
DBPROP_IRowsetLocate nebo DBPROP_IRowsetScroll | VARIANT_TRUE | Data SQL Serveru nelze aktualizovat prostřednictvím sady řádků. Sada řádků podporuje posouvání a načítání v obou směrech. Záložky a absolutní umístění prostřednictvím rozhraní IRowsetLocate jsou podporovány v sadě řádků. Text příkazu může obsahovat klauzuli ORDER BY. DBPROP_IRowsetLocate a DBPROP_IRowsetScroll vyžadují záložky v sadě řádků. Pokus o vytvoření sady řádků se záložkami a DBPROP_OTHERINSERT nastavený na VARIANT_TRUE způsobí chybu. |
DBPROP_IRowsetChange nebo DBPROP_IRowsetUpdate | VARIANT_TRUE | Může aktualizovat data SQL Serveru prostřednictvím sady řádků. Sada řádků je sekvenční a podporuje posouvání vpřed a načítání pouze. Podporuje se relativní umístění řádků. Všechna příkazy, které podporují aktualizovatelné kurzory, můžou tato rozhraní podporovat. |
DBPROP_IRowsetLocate nebo DBPROP_IRowsetScroll a DBPROP_IRowsetChange nebo DBPROP_IRowsetUpdate | VARIANT_TRUE | Může aktualizovat data SQL Serveru prostřednictvím sady řádků. Sada řádků podporuje posouvání a načítání v obou směrech. Záložky a absolutní umístění prostřednictvím IRowsetLocate jsou podporovány v sadě řádků. Text příkazu může obsahovat klauzuli ORDER BY. |
DBPROP_IMMOBILEROWS | VARIANT_FALSE | Data SQL Serveru nelze aktualizovat prostřednictvím sady řádků. Sada řádků podporuje posouvání vpřed. Podporuje se relativní umístění řádků. Text příkazu může obsahovat klauzuli ORDER BY, pokud na odkazovaných sloupcích existuje index. DBPROP_IMMOBILEROWS je k dispozici pouze v sadách řádků, které můžou zobrazit řádky SQL Serveru vložené příkazy v jiných relacích nebo jinými uživateli. Pokus o otevření sady řádků s vlastností nastavenou na VARIANT_FALSE v libovolné sadě řádků, pro kterou DBPROP_OTHERINSERT nelze VARIANT_TRUE způsobí chybu. |
DBPROP_REMOVEDELETED | VARIANT_TRUE | Data SQL Serveru nelze aktualizovat prostřednictvím sady řádků. Sada řádků podporuje posouvání vpřed. Podporuje se relativní umístění řádků. Text příkazu může obsahovat klauzuli ORDER BY, pokud není omezena jinou vlastností. |
Ovladač OLE DB pro sadu řádků SYSTÉMU SQL Server podporovaný kurzorem serveru lze snadno vytvořit v základní tabulce nebo zobrazení SYSTÉMU SQL Server pomocí metody IOpenRow set::OpenRowset. Zadejte tabulku nebo zobrazení podle názvu a předáte požadované sady vlastností sady řádků v rgPropertySets parametru.
Text příkazu, který vytvoří sadu řádků, je omezen, když příjemce vyžaduje, aby sada řádků byla podporována kurzorem serveru. Konkrétně je text příkazu omezen na jeden příkaz SELECT, který vrací jeden výsledek sady řádků nebo uloženou proceduru, která implementuje jeden příkaz SELECT vracející jeden výsledek sady řádků.
Tyto dvě tabulky zobrazují mapování různých vlastností OLE DB a modelů kurzorů. Zobrazují také vlastnosti sady řádků, které mají být nastaveny tak, aby používaly určitý typ modelu kurzoru.
Každá buňka v tabulce obsahuje hodnotu vlastnosti sady řádků pro konkrétní model kurzoru. Datový typ všech vlastností sady řádků uvedených dříve v tomto tématu je VT_BOOL a výchozí hodnota je VARIANT_FALSE. V tabulce se používají následující symboly.
F = výchozí hodnota (VARIANT_FALSE)
T = VARIANT_TRUE
- = VARIANT_TRUE nebo VARIANT_FALSE
Pokud chcete použít určitý typ modelu kurzoru, vyhledejte sloupec odpovídající modelu kurzoru a vyhledejte všechny vlastnosti sady řádků s hodnotou T ve sloupci. Nastavte tyto vlastnosti sady řádků na VARIANT_TRUE pro použití konkrétního modelu kurzoru. Vlastnosti sady řádků s hodnotou -lze nastavit na VARIANT_TRUE nebo VARIANT_FALSE.
Vlastnosti sady řádků / modely kurzoru | Výchozí výsledek nastavit (RO) |
Rychlý vpřed- pouze (RO) |
Statický (RO) |
Sada klíčů řízený (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 |
Vlastnosti sady řádků / Modely kurzoru | Dynamická (RO) | Sada klíčů (R/W) | Dynamická (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 |
Pro určitou sadu vlastností sady řádků je vybraný model kurzoru určen následujícím způsobem.
Ze zadané kolekce vlastností sady řádků získejte podmnožinu vlastností uvedených v předchozích tabulkách. Tyto vlastnosti rozdělte do dvou podskupin v závislosti na požadované hodnotě příznaku (T, F) nebo volitelné (-)-u každé vlastnosti sady řádků. Pro každý model kurzoru začněte v první tabulce a přejděte zleva doprava. Porovnejte hodnoty vlastností ve dvou podskupinách s hodnotami odpovídajících vlastností v daném sloupci. Model kurzoru, který neodpovídá požadovaným vlastnostem, a je vybrán nejmenší počet neshod s volitelnými vlastnostmi. Pokud existuje více než jeden model kurzoru, vybere se úplně vlevo.
Velikost bloku kurzoru SQL Serveru
Pokud kurzor SQL Serveru podporuje ovladač OLE DB pro sadu řádků SYSTÉMU SQL Server, počet prvků v maticovém parametru IRowset::GetNextRows nebo IRowsetLocate::GetRowsAt metody definuje velikost bloku kurzoru. Řádky označené úchyty v poli jsou členy bloku kurzoru.
U sad řádků podporujících záložky definují obslužné rutiny řádků načtené pomocí IRowsetLocate::GetRowsByBookmark metoda definovat členy bloku kurzoru.
Bez ohledu na metodu použitou k naplnění sady řádků a vytvoření bloku kurzoru SYSTÉMU SQL Server je blok kurzoru aktivní, dokud se v sadě řádků nespustí další metoda načítání řádků.