Używanie parametrów instrukcji — wiążące parametry

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

Każdy znacznik parametru w instrukcji SQL musi być powiązany, czyli ograniczony, do zmiennej w aplikacji, zanim instrukcja może zostać wykonana. Robi się to poprzez wywołanie funkcji SQLBindParameter . SQLBindParameter opisuje zmienną programu (adres, typ danych C itd.) dla sterownika. Identyfikuje także marker parametru, wskazując jego wartość porządkową, a następnie opisuje cechy obiektu SQL, który reprezentuje (typ danych SQL, precyzja itd.).

Markery parametrów mogą być związane lub odbite w dowolnym momencie przed wykonaniem instrukcji. Wiązanie parametrów pozostaje w mocy do momentu wystąpienia jednego z następujących przypadków:

  • Wywołanie do SQLFreeStmt z parametrem Option ustawionym na SQL_RESET_PARAMS uwalnia wszystkie parametry powiązane z uchwytem instrukcji.

  • Wywołanie do SQLBindParameter z ParameterNumber ustawionym na porządkowy marker parametru automatycznie zwalnia poprzednie powiązanie.

Aplikacja może również wiązać parametry z tablicami zmiennych programowych, aby przetwarzać instrukcje SQL w partiach. Istnieją dwa typy wiązania tablic:

  • Powiązanie kolumnowe odbywa się, gdy każdy pojedynczy parametr jest przypisany do własnej tablicy zmiennych.

    Wiązanie kolumnowe określa się poprzez wywołanie SQLSetStmtAttr z atrybutem ustawionym na SQL_ATTR_PARAM_BIND_TYPE i ValuePtr na SQL_PARAM_BIND_BY_COLUMN.

  • Wiązanie wierszowe polega na tym, że wszystkie parametry w instrukcji SQL są powiązane jako jednostka z tablicą struktur zawierających poszczególne zmienne dla parametrów.

    Wiązanie wierszowe określa się przez wywołanie SQLSetStmtAttr z atrybutem ustawionym na SQL_ATTR_PARAM_BIND_TYPE i ValuePtr na rozmiar struktury zawierającej zmienne programowe.

Gdy sterownik ODBC natywnego klienta SQL Server wysyła do serwera parametry znaków lub binarnych ciągów znaków, dodaje wartości do długości określonej w parametrze SQLBindParameterColumnSize. Jeśli aplikacja ODBC 2.x określa 0 dla ColumnSize, sterownik dopasowuje wartość parametru do precyzji typu danych. Precyzja wynosi 8000 przy połączeniu z serwerami SQL Server, 255 przy połączeniu z wcześniejszymi wersjami SQL Server. ColumnSize jest w bajtach dla kolumn wariantów.

SQL Server obsługuje definiowanie nazw parametrów procedur przechowywanych. ODBC 3.5 wprowadził także wsparcie dla nazwanych parametrów używanych podczas wywoływania procedur przechowywanych w SQL Server. To wsparcie może być wykorzystane do:

  • Wywołaj procedurę przechowywaną i podaj wartości dla podzbioru parametrów zdefiniowanych dla procedury przechowywanej.

  • Określ parametry w innej kolejności w aplikacji niż w kolejności określonej podczas tworzenia procedury przechowywanej.

Parametry nazwane są obsługiwane tylko wtedy, gdy używa się instrukcji EXECUTE Transact-SQL lub sekwencji escape ODBC CALL do wykonania procedury przechowywanej.

Jeśli SQL_DESC_NAME jest ustawiony dla parametru procedury przechowywanej, wszystkie parametry procedury przechowywanej w zapytaniu również powinny ustawić SQL_DESC_NAME. Jeśli literale są używane w wywołaniach procedur przechowywanych, gdzie parametry SQL_DESC_NAME ustawione, literale powinny używać formatu 'wartość nazwy=', gdzie nazwa to nazwa parametru procedury przechowywanej (na przykład @p1). Więcej informacji można znaleźć w artykule Binding Parameters by Name (Named Parameters).