SQLSetStmtAttr

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Natywny sterownik ODBC klienta SQL Server nie obsługuje modelu kursorów mieszanych (zestaw kluczy/dynamiczny). Próby ustawienia rozmiaru zestawu kluczy za pomocą SQL_ATTR_KEYSET_SIZE zakończą się niepowodzeniem, jeśli zestaw wartości nie jest równy 0.

Aplikacja ustawia SQL_ATTR_ROW_ARRAY_SIZE we wszystkich instrukcjach, aby zadeklarować liczbę wierszy zwracanych w wywołaniu funkcji SQLFetch lub SQLFetchScroll . W instrukcjach wskazujących kursor serwera sterownik używa SQL_ATTR_ROW_ARRAY_SIZE do określenia rozmiaru bloku wierszy, który serwer generuje w celu spełnienia żądania pobierania z kursora. W ramach rozmiaru dynamicznego kursora przynależność i kolejność wierszy są stałe, jeśli poziom izolacji transakcji jest wystarczający, aby zapewnić powtarzalne odczyty zatwierdzonych transakcji. Kursor jest całkowicie dynamiczny poza blokiem oznaczonym tą wartością. Rozmiar bloku kursora serwera jest całkowicie dynamiczny i może być zmieniany w dowolnym momencie procesu pobierania.

SQLSetStmtAttr i parametry Table-Valued

SQLSetStmtAttr może być używany do ustawienia SQL_SOPT_SS_PARAM_FOCUS w deskryptorze parametrów aplikacji (APD) przed uzyskaniem dostępu do pól deskryptorowych kolumn parametrów tabelowych.

Jeśli zostanie podjęta próba ustawienia SQL_SOPT_SS_PARAM_FOCUS na porządkowy parametru, który nie jest parametrem tabelowym, SQLSetStmtAttr zwraca SQL_ERROR i tworzy się rekord diagnostyczny z SQLSTATE = HY024 oraz komunikatem "Nieprawidłowa wartość atrybutu". SQL_SOPT_SS_PARAM_FOCUS nie zmienia się po SQL_ERROR zwrotu.

Ustawienie SQL_SOPT_SS_PARAM_FOCUS na 0 przywraca dostęp do rekordów deskryptorów dla parametrów.

SQLSetStmtAttr może być również używany do ustawiania SQL_SOPT_SS_NAME_SCOPE. Więcej informacji znajdziesz w sekcji SQL_SOPT_SS_NAME_SCOPE, później w tym temacie.

Więcej informacji można znaleźć w Table-Valued Metadanych parametrów dla przygotowanych wypowiedzi.

Więcej informacji o parametrach tabelowych można znaleźć w Table-Valued Parameters (ODBC).

SQLSetStmtAttr Support for Sparse Columns

SQLSetStmtAttr może być używany do ustawiania SQL_SOPT_SS_NAME_SCOPE. Więcej informacji znajdziesz w sekcji SQL_SOPT_SS_NAME_SCOPE, później w tym temacie. Więcej informacji o kolumnach rzadkich można znaleźć w artykule Sparse Columns Support (ODBC).

Atrybuty instrukcji

Natywny sterownik ODBC klienta SQL Server obsługuje również następujące atrybuty specyficzne dla sterownika.

SQL_SOPT_SS_CURSOR_OPTIONS

Atrybut SQL_SOPT_SS_CURSOR określa, czy sterownik będzie korzystał z specyficznych dla sterownika opcji wydajności kursorów. SQLGetData nie jest dozwolone, gdy te opcje są ustawione. Domyślne ustawienie to SQL_CO_OFF. Wartość ValuePtr ma typ SQLLEN.

Wartość Ptr Description
SQL_CO_OFF Default. Wyłącza kursory tylko przewijania do przodu, tylko do odczytu i autofetch, włącza SQLGetData na kursorach tylko do przodu i tylko do odczytu. Gdy SQL_SOPT_SS_CURSOR_OPTIONS jest ustawione na SQL_CO_OFF, typ kursora się nie zmienia. Oznacza to, że kursor tylko do przewijania do przodu pozostanie kursorem tylko do przewijania do przodu. Aby zmienić typ kursora, aplikacja musi teraz ustawić inny typ kursora za pomocą SQLSetStmtAttr/SQL_ATTR_CURSOR_TYPE.
SQL_CO_FFO Włącza kursory tylko do przewijania i tylko do odczytu, wyłącza SQLGetData na kursorach tylko do przodu i tylko do odczytu.
SQL_CO_AF Włącza opcję automatycznego pobierania na dowolnym typie kursora. Gdy ta opcja jest ustawiona dla uchwytu instrukcji, SQLExecute lub SQLExecDirect generują implicitny SQLFetchScroll (SQL_FIRST). Kursor jest otwierany, a pierwsza partia wierszy wraca w jednym kursie w obie strony na serwer.
SQL_CO_FFO_AF Włącza kursory tylko do przewijania z opcją automatycznego pobierania. To tak samo, jakby określono zarówno SQL_CO_AF, jak i SQL_CO_FFO.

Gdy te opcje zostaną ustawione, serwer automatycznie zamyka kursor, gdy wykryje, że ostatni wiersz został pobrany. Aplikacja musi nadal wywoływać SQLFreeStmt (SQL_CLOSE) lub SQLCloseCursor, ale sterownik nie musi wysyłać powiadomienia o zamknięciu do serwera.

Jeśli lista wyboru zawiera kolumnę tekstową, ntext lub obraz, kursor tylko do przewijania do przodu jest konwertowany na dynamiczny i dozwolony jest SQLGetData .

SQL_SOPT_SS_DEFER_PREPARE

Atrybut SQL_SOPT_SS_DEFER_PREPARE decyduje, czy zdanie jest przygotowane natychmiast, czy odroczone do czasu wykonania SQLExecute, SQLDescribeCol lub SQLDescribeParam . W SQL Server 7.0 i wcześniejszych ta właściwość jest ignorowana (brak odroczonego przygotowania). Wartość ValuePtr ma typ SQLLEN.

Wartość Ptr Description
SQL_DP_ON Default. Po wywołaniu funkcji SQLPrepare przygotowanie instrukcji jest odraczane do czasu wywołania SQLExecute lub wykonania operacji metawłaściwości (SQLDescribeCol lub SQLDescribeParam).
SQL_DP_OFF Oświadczenie jest przygotowywane zaraz po wykonaniu SQLPrepare .

SQL_SOPT_SS_REGIONALIZE

Atrybut SQL_SOPT_SS_REGIONALIZE służy do określenia konwersji danych na poziomie instrukcji. Atrybut ten powoduje, że sterownik respektuje ustawienia lokalizacji klienta podczas konwersji daty, godziny i waluty na ciągi znaków. Konwersja polega wyłącznie na przejściu z natywnych typów danych SQL Server na ciągi znaków.

Wartość ValuePtr ma typ SQLLEN.

Wartość Ptr Description
SQL_RE_OFF Default. Sterownik nie konwertuje daty, czasu i waluty na dane ciągów znaków przy użyciu ustawień lokalizacji klienta.
SQL_RE_ON Sterownik wykorzystuje ustawienia lokalizacji klienta podczas konwersji daty, godziny i waluty na dane ciągów znaków.

Ustawienia konwersji regionalnej dotyczą typów danych walutowych, numerycznych, datowych i czasowych. Ustawienie konwersji dotyczy tylko konwersji wyjściowych, gdy waluta, liczba, data lub czas są konwertowane na ciągi znaków.

Note

Gdy opcja SQL_SOPT_SS_REGIONALIZE jest włączona, sterownik korzysta z ustawień rejestru lokalnego dla bieżącego użytkownika. Sterownik nie respektuje lokalizacji bieżącego wątku, jeśli aplikacja ustawia ją na przykład przez wywołanie SetThreadLocale.

Zmiana zachowania regionalnego źródła danych może spowodować awarię aplikacji. Aplikacja, która analizuje łańcuchy dat i oczekuje, że ciągi dat będą wyglądać zgodnie z definicją ODBC, mogłaby zostać negatywnie dotknięta zmianą tej wartości.

SQL_SOPT_SS_TEXTPTR_LOGGING

Atrybut SQL_SOPT_SS_TEXTPTR_LOGGING przełącza logowanie operacji na kolumnach zawierających dane tekstowe lub obrazowe . Wartość ValuePtr ma typ SQLLEN.

Wartość Ptr Description
SQL_TL_OFF Wyłącza logowanie operacji wykonywanych na danych tekstowych i obrazowych .
SQL_TL_ON Default. Umożliwia logowanie operacji wykonywanych na danych tekstowych i obrazowych .

SQL_SOPT_SS_HIDDEN_COLUMNS

Atrybut SQL_SOPT_SS_HIDDEN_COLUMNS ujawnia w zbiorze wyników kolumny ukryte w SQL Server instrukcji SELECT FOR BROWSE (SELECT for BROWSE (PRZEGLĄD). Sterownik domyślnie nie wyświetla tych kolumn. Wartość ValuePtr ma typ SQLLEN.

Wartość Ptr Description
SQL_HC_OFF Default. Kolumny FOR BROWSE są ukryte w zbiorze wyników.
SQL_HC_ON Eksposuje kolumny DO PRZEGLĄDANIA.

SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT

Atrybut SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT zwraca tekst wiadomości dla żądania powiadomienia zapytania.

SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS

Atrybut SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS określa opcje używane dla żądania powiadomień zapytania. Są one określone w ciągu o name=value składni podanej poniżej. Aplikacja odpowiada za tworzenie usługi i odczyt powiadomień z kolejki.

Składnia ciągu opcji powiadomień zapytań to:

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

Przykład:

service=mySSBService;local database=mydb

SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT

Atrybut SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT określa liczbę sekund, przez które powiadomienie zapytania pozostaje aktywne. Domyślna wartość to 432000 sekund (5 dni). Wartość ValuePtr ma typ SQLLEN.

SQL_SOPT_SS_PARAM_FOCUS

Atrybut SQL_SOPT_SS_PARAM_FOCUS określa fokus kolejnych wywołań SQLBindParameter, SQLGetDescField, SQLSetDescField, SQLGetDescRec oraz SQLSetDescRec.

Typ SQL_SOPT_SS_PARAM_FOCUS to SQLULEN.

Domyślnie to 0, co oznacza, że te wywołania adresują parametry odpowiadające znacznikom parametrów w instrukcji SQL. Po ustawieniu na parametr parametru tabelowego, wywołania te adresują kolumny tego parametru tabelowego. Po ustawieniu wartości niebędącej numerem parametru tabelowego, te wywołania zwracają błąd IM020: "Parameter focus not refers to table valued parameter (parametr skupiany" (Parameter focus not call to table valued).

SQL_SOPT_SS_NAME_SCOPE

Atrybut SQL_SOPT_SS_NAME_SCOPE określa zakres nazw dla kolejnych wywołań funkcji katalogowych. Zbiór wyników zwracany przez SQLColumns zależy od ustawienia SQL_SOPT_SS_NAME_SCOPE.

Typ SQL_SOPT_SS_NAME_SCOPE to SQLULEN.

Wartość Ptr Description
SQL_SS_NAME_SCOPE_TABLE Default.

Przy użyciu parametrów tabelowych oznacza to, że metadane dla rzeczywistych tabel powinny być zwracane.

Podczas korzystania z funkcji rzadkich kolumn SQLColumns zwraca tylko kolumny, które nie są członkami column_set rzadkości.
SQL_SS_NAME_SCOPE_TABLE_TYPE Wskazuje, że aplikacja wymaga metadanych dla typu tabeli, a nie rzeczywistej tabeli (funkcje katalogowe powinny zwracać metadane dla typów tabel). Aplikacja następnie przekazuje TYPE_NAME parametru tabelowego jako parametr TableName .
SQL_SS_NAME_SCOPE_EXTENDED Korzystając z funkcji rzadkich kolumn, SQLColumns zwraca wszystkie kolumny, niezależnie od column_set członkostwa.
SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET Przy użyciu funkcji rzadkich kolumn SQLColumns zwraca tylko kolumny będące członkami rzadkiej column_set.
SQL_SS_NAME_SCOPE_DEFAULT Równe SQL_SS_NAME_SCOPE_TABLE.

SS_TYPE_CATALOG_NAME i SS_TYPE_SCHEMA_NAME są używane odpowiednio z parametrami CatalogName i SchemaName do identyfikacji katalogu i schematu parametru o wartości tabelowej. Gdy aplikacja zakończy pobieranie metadanych dla parametrów tabelowych, musi przywrócić SQL_SOPT_SS_NAME_SCOPE do domyślnej wartości SQL_SS_NAME_SCOPE_TABLE.

Gdy SQL_SOPT_SS_NAME_SCOPE jest ustawione na SQL_SS_NAME_SCOPE_TABLE, zapytania do połączonych serwerów nie przechodzą. Wywołania do SQLColumns lub SQLPrimaryKeys z katalogiem zawierającym komponent serwera nie ulegają awarii.

Jeśli spróbujesz ustawić SQL_SOPT_SS_NAME_SCOPE na wartość nieprawidłową, SQL_ERROR zwraca się i generowany jest rekord diagnostyczny z SQLSTATE HY024 oraz komunikatem "Invalid attribute value".

Jeśli funkcja katalogowa inna niż SQLTables, SQLColumns lub SQLPrimaryKeys zostanie wywołana, gdy SQL_SOPT_SS_NAME_SCOPE ma wartość inną niż SQL_SS_NAME_SCOPE_TABLE, zwraca SQL_ERROR. Generowany jest rekord diagnostyczny z SQLSTATE HY010 oraz komunikatem "Function sequence error (SQL_SOPT_SS_NAME_SCOPE is not set to SQL_SS_NAME_SCOPE_TABLE)".