SQLSetStmtAttr

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformní systém (PDW)

Nativní klientský ODBC ovladač SQL Server nepodporuje smíšený (klíčová/dynamický) kurzorový model. Pokusy o nastavení velikosti klíčové sady pomocí SQL_ATTR_KEYSET_SIZE selžou, pokud hodnota není rovna 0.

Aplikace nastavuje SQL_ATTR_ROW_ARRAY_SIZE na všechny příkazy tak, aby deklarovala počet řádků vrácených při volání funkce SQLFetch nebo SQLFetchScroll . U příkazů označujících kurzor serveru ovladač SQL_ATTR_ROW_ARRAY_SIZE použije k určení velikosti bloku řádků, které server generuje pro uspokojení požadavku na načtení kurzoru. V rámci velikosti bloku dynamického kurzoru je členství v řádku a pořadí pevně dané, pokud je úroveň izolace transakcí dostatečná k zajištění opakovatelných čtení zavázaných transakcí. Kurzor je zcela dynamický mimo blok označený touto hodnotou. Velikost bloku kurzoru serveru je zcela dynamická a lze ji měnit kdykoli během načítaní.

SQLSetStmtAttr a Table-Valued parametry

SQLSetStmtAttr lze použít k nastavení SQL_SOPT_SS_PARAM_FOCUS v aplikačním parametrovém deskriptoru (APD) před přístupem k deskriptorovým polím pro tabulkově hodnotové sloupce.

Pokud se pokusí nastavit SQL_SOPT_SS_PARAM_FOCUS na ordinál parametru, který není parametrem s tabulkovou hodnotou, SQLSetStmtAttr vrátí SQL_ERROR a vytvoří diagnostický záznam s SQLSTATE = HY024 a zprávou "Invalid attribute value". SQL_SOPT_SS_PARAM_FOCUS se při vrácení SQL_ERROR nemění.

Nastavení SQL_SOPT_SS_PARAM_FOCUS na 0 obnoví přístup k descriptorovým záznamům pro parametry.

SQLSetStmtAttr lze také použít k nastavení SQL_SOPT_SS_NAME_SCOPE. Pro více informací viz sekce SQL_SOPT_SS_NAME_SCOPE později v tomto tématu.

Pro více informací viz Table-Valued Metadata parametrů pro připravené výpisy.

Pro více informací o tabulkových parametrech viz Table-Valued Parametry (ODBC).

SQLSetStmtAttr podpora pro sparse columns

SQLSetStmtAttr lze použít k nastavení SQL_SOPT_SS_NAME_SCOPE. Pro více informací viz sekce SQL_SOPT_SS_NAME_SCOPE později v tomto tématu. Pro více informací o řídkých sloupcích viz Sparse Columns Support (ODBC).

Atributy prohlášení

Nativní klientský ODBC ovladač SQL Server také podporuje následující specifické atributy příkazu pro ovladač.

SQL_SOPT_SS_CURSOR_OPTIONS

Atribut SQL_SOPT_SS_CURSOR určuje, zda ovladač použije specifické výkonnostní možnosti kurzorů. SQLGetData není povolena, pokud jsou tyto možnosti nastaveny. Výchozí nastavení je SQL_CO_OFF. Hodnota ValuePtr je typu SQLLEN.

ValuePtr hodnota Description
SQL_CO_OFF Výchozí. Vypíná pouze rychlé převíjení, pouze čtecí kurzory a automatické načítání, umožňuje SQLGetData na kurzorech pouze pro dopředání a čtení. Když je SQL_SOPT_SS_CURSOR_OPTIONS nastaveno na SQL_CO_OFF, typ kurzoru se nezmění. To znamená, že kurzor pouze pro přetáčení vpřed zůstane kurzorem pouze pro přetáčení vpřed. Pro změnu typu kurzoru musí aplikace nyní nastavit jiný typ kurzoru pomocí SQLSetStmtAttr/SQL_ATTR_CURSOR_TYPE.
SQL_CO_FFO Povoluje kurzory pouze pro rychlé přetáčení a pouze pro čtení, deaktivuje SQLGetData u kurzorů pouze pro přesměrování a čtení.
SQL_CO_AF Umožňuje automatické načítání na jakémkoli typu kurzoru. Když je tato volba nastavena pro příkazový handle, SQLExecute nebo SQLExecDirect vygenerují implicitní SQLFetchScroll (SQL_FIRST). Kurzor se otevře a první várka řádků se vrátí v jednom oběhu zpět na server.
SQL_CO_FFO_AF Umožňuje pouze rychlé přetáčení kurzorů s možností automatického načítání. Je to stejné, jako kdyby byly specifikovány jak SQL_CO_AF, tak SQL_CO_FFO.

Když jsou tyto možnosti nastaveny, server automaticky uzavře kurzor, jakmile zjistí, že poslední řádek byl načten. Aplikace musí stále volat SQLFreeStmt (SQL_CLOSE) nebo SQLCloseCursor, ale ovladač nemusí posílat oznámení o ukončení na server.

Pokud seznam výběru obsahuje text, ntext nebo sloupec obrázků, kurzor pouze pro rychlé převídání je převeden na dynamický kurzor a je povolen SQLGetData.

SQL_SOPT_SS_DEFER_PREPARE

Atribut SQL_SOPT_SS_DEFER_PREPARE určuje, zda je příkaz připraven okamžitě, nebo odložen do spuštění SQLExecute, SQLDescribeCol nebo SQLDescribeParam . V SQL Server 7.0 a starších je tato vlastnost ignorována (žádné odložené přípravy). Hodnota ValuePtr je typu SQLLEN.

ValuePtr hodnota Description
SQL_DP_ON Výchozí. Po zavolání funkce SQLPrepare je příprava příkazu odložena, dokud není vyvoláno SQLExecute nebo není vykonána operace metavlastností (SQLDescribeCol nebo SQLDescribeParam).
SQL_DP_OFF Příkaz je připraven ihned po spuštění SQLPrepe .

SQL_SOPT_SS_REGIONALIZE

Atribut SQL_SOPT_SS_REGIONALIZE se používá k určení konverze dat na úrovni příkazu. Tento atribut způsobuje, že ovladač respektuje nastavení klientské lokality při převodu dat, času a měn na znakové řetězce. Převod probíhá z nativních datových typů SQL Server pouze na řetězce znaků.

Hodnota ValuePtr je typu SQLLEN.

ValuePtr hodnota Description
SQL_RE_OFF Výchozí. Ovladač nepřevádí data, čas a měnu na znaková řetězce pomocí nastavení klientského prostředí.
SQL_RE_ON Ovladač používá nastavení klientské lokality při převodu dat, času a měn na data řetězců znaků.

Regionální konverzní nastavení se vztahují na měnové, číselné, datové a časové typy. Nastavení konverze platí pouze pro výstupní konverze, když jsou měny, čísel, data nebo času převedeny na znakové řetězce.

Note

Když je zapnutá možnost příkazu SQL_SOPT_SS_REGIONALIZE, ovladač používá nastavení registru lokality pro aktuálního uživatele. Ovladač nerespektuje aktuální lokalitu vlákna, pokud ji aplikace nastaví například voláním SetThreadLocale.

Změna regionálního chování datového zdroje může způsobit selhání aplikace. Aplikace, která analyzuje řetězce dat a očekává, že řetězce budou vypadat podle definice ODBC, by mohla být změnou této hodnoty negativně ovlivněna.

SQL_SOPT_SS_TEXTPTR_LOGGING

Atribut SQL_SOPT_SS_TEXTPTR_LOGGING přepíná zaznamenávání operací ve sloupcích obsahujícíchtextová nebo obrazová data. Hodnota ValuePtr je typu SQLLEN.

ValuePtr hodnota Description
SQL_TL_OFF Vypíná záznamy operací prováděných na textových a obrazových datech.
SQL_TL_ON Výchozí. Umožňuje zaznamenávání operací provedených na textovýcha obrazových datech.

SQL_SOPT_SS_HIDDEN_COLUMNS

Atribut SQL_SOPT_SS_HIDDEN_COLUMNS vystavuje ve výsledné sadě sloupce skryté v příkazu SELECT FOR BROWSE SQL Server. Ovladač tyto sloupce ve výchozím nastavení nezobrazuje. Hodnota ValuePtr je typu SQLLEN.

ValuePtr hodnota Description
SQL_HC_OFF Výchozí. Sloupce PRO BROWSE jsou skryté ve výsledné množině.
SQL_HC_ON Expozice PRO PROHLÍŽENÍ sloupků.

SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT

Atribut SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT vrací text zprávy pro požadavek na oznámení dotazu.

SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS

Atribut SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS specifikuje možnosti použité pro požadavek na notifikaci dotazu. Tyto jsou specifikovány v řetězci se name=value syntaxí, jak je uvedeno níže. Aplikace je zodpovědná za vytváření služby a čtení notifikací z fronty.

Syntaxe řetězce možností dotazu je:

service=<service-name>[;(local database=<database>|broker instance=<broker instance>)]

Příklady:

service=mySSBService;local database=mydb

SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT

Atribut SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT určuje, kolik sekund má oznámení o dotazu zůstat aktivní. Výchozí hodnota je 432000 sekund (5 dní). Hodnota ValuePtr je typu SQLLEN.

SQL_SOPT_SS_PARAM_FOCUS

Atribut SQL_SOPT_SS_PARAM_FOCUS specifikuje zaměření pro následující volání SQLBindParameter, SQLGetDescField, SQLSetDescField, SQLGetDescRec a SQLSetDescRec.

Typ pro SQL_SOPT_SS_PARAM_FOCUS je SQLULEN.

Výchozí je 0, což znamená, že tato volání adresují parametry, které odpovídají parametrům v SQL příkazu. Při nastavení na číslo parametru parametru s tabulkovou hodnotou tato volání adresují sloupce tohoto parametru s tabulkovou hodnotou. Pokud je tato volání nastavena na hodnotu, která není číslem parametru tabulkově hodnotitého, vracejí chybu IM020: "Zaměření parametru se nevztahuje na parametr s tabulkovou hodnotou".

SQL_SOPT_SS_NAME_SCOPE

Atribut SQL_SOPT_SS_NAME_SCOPE určuje rozsah názvu pro následující volání katalogových funkcí. Výsledná sada vrácená SQLColumns závisí na nastavení SQL_SOPT_SS_NAME_SCOPE.

Typ pro SQL_SOPT_SS_NAME_SCOPE je SQLULEN.

ValuePtr hodnota Description
SQL_SS_NAME_SCOPE_TABLE Výchozí.

Při použití parametrů s tabulkovými hodnotami označuje, že by měla být vrácena metadata pro skutečné tabulky.

Při použití funkce řídkých sloupců SQLColumns vrátí pouze sloupce, které nejsou členy řídké column_set.
SQL_SS_NAME_SCOPE_TABLE_TYPE Označuje, že aplikace vyžaduje metadata pro typ tabulky, nikoli pro skutečnou tabulku (katalogové funkce by měly vracet metadata pro typy tabulek). Aplikace pak předává TYPE_NAME parametru s hodnotou tabulky jako parametr TableName .
SQL_SS_NAME_SCOPE_EXTENDED Při použití funkce řídkých sloupců SQLColumns vrací všechny sloupce bez ohledu na column_set členství.
SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET Při použití funkce řídkých sloupců SQLColumns vrací pouze sloupce, které jsou členy řídké column_set.
SQL_SS_NAME_SCOPE_DEFAULT Rovno SQL_SS_NAME_SCOPE_TABLE.

SS_TYPE_CATALOG_NAME a SS_TYPE_SCHEMA_NAME se používají s parametry CatalogName a SchemaName , respektive, k identifikaci katalogu a schématu pro parametr s hodnotou tabulky. Když aplikace dokončí získávání metadat pro tabulkové parametry, musí SQL_SOPT_SS_NAME_SCOPE nastavit zpět na výchozí hodnotu SQL_SS_NAME_SCOPE_TABLE.

Když je SQL_SOPT_SS_NAME_SCOPE nastaveno na SQL_SS_NAME_SCOPE_TABLE, dotazy na propojené servery selžou. Volání SQLColumns nebo SQLPrimaryKeys s katalogem obsahujícím serverovou komponentu selžou.

Pokud se pokusíte nastavit SQL_SOPT_SS_NAME_SCOPE na neplatnou hodnotu, SQL_ERROR se vrátí a vygeneruje se diagnostický záznam se SQLSTATE HY024 a zprávou "Invalid attribute value".

Pokud je zavolána katalogová funkce jiná než SQLTables, SQLColumns nebo SQLPrimaryKeys, když SQL_SOPT_SS_NAME_SCOPE má hodnotu jinou než SQL_SS_NAME_SCOPE_TABLE, SQL_ERROR se vrátí. Je vygenerován diagnostický záznam pomocí SQLSTATE HY010 a zpráva "Function sequence error (SQL_SOPT_SS_NAME_SCOPE is not set to SQL_SS_NAME_SCOPE_TABLE)".