Udostępnij za pośrednictwem


Używa tabela Valued Parametry ODBC

W tym temacie omówiono scenariuszy podstawową użytkownika dla ODBC przy użyciu wartości z tabela parametrów:

  • Tabela Valued parametr w pełni wiązania buforów multirow (Wyślij dane jako TVP o wartości wszystkie w pamięci)

  • Tabela Valued parametr z wierszy strumienia (Wyślij dane jako TVP, przy użyciu danych przy wykonywaniu)

  • Pobieranie tabela Valued parametr metadane z katalogu systemu

  • Pobieranie tabela Valued parametr metadane dla gotowa instrukcja

Tabela Valued parametr w pełni wiązania buforów multirow (Wyślij dane jako TVP o wartości wszystkie w pamięci)

Użyto w pełni związanego buforów multirow wszystkie wartości parametrów są dostępne w pamięci.Jest to typowy, na przykład dla transakcję OLTP, w których wartości w tabela parametrów można pakowane w jednej procedurze przechowywanej.Bez wartości w tabela parametrów wymagałoby to dynamicznego generowania złożonych multi-instrukcja partia, albo wiele połączeń z serwerem.

Powiązane przy użyciu parametru wartości tabela sam SQLBindParameter razem z innymi parametrami.Po wszystkie parametry mają zostały powiązane, aplikacja ustawia atrybut fokus do parametru, SQL_SOPT_SS_PARAM_FOCUS, na każdy parametr wycenione tabela i wywołań SQLBindParameter w przypadku kolumn parametru wartości w tabela.

Typ serwera dla parametru wartości w tabela jest nowy SQL Server-określonego typu, SQL_SS_TABLE. Typ wiązania C SQL_SS_TABLE musi być zawsze SQL_C_DEFAULT.Nie dane są przesyłane do parametru wartości tabela powiązane parametr; służy ona do przekazywania metadane tabela oraz do kontrolowania sposobu przekazywania danych w kolumnach składowe parametru wartości w tabela.

Długość parametru wartości w tabela jest zestaw do liczby wierszy, które są wysyłane do serwera.The ColumnSize parameter of SQLBindParameter for a table-valued parameter specifies the maximum number of rows that can be sent; this is the array size of the column buffers.ParameterValuePtr is the parameter buffer,for a table-valued parameter in SQLBindParameter.ParameterValuePtr and its associated BufferLength are used to pass the type name of the table-valued parameter when required.Nazwa typu nie jest wymagany do wywołania procedura przechowywana, ale jest to wymagane dla instrukcji SQL.

Jeśli nazwa typu parametru wartości tabela zostanie użyty na wywołanie SQLBindParameter, należy ją określić jako wartość Unicode, nawet w aplikacjach, które są wbudowane, jak aplikacje ANSI. Określić nazwę typu parametru wartości tabela przy użyciu SQLSetDescField, można użyć literał, który jest zgodny ze sposobem, w jaki aplikacja jest tworzona. Menedżer sterownika ODBC będzie wykonywał żadnych wymagana konwersja Unicode.

Metadane dla kolumn wycenione tabela parametru i wartości w tabela parametrów można manipulować indywidualnie i bezpośrednio za pomocą SQLGetDescRec, SQLSetDescRec, SQLGetDescField, a SQLSetDescField. Jednak przeciążenia SQLBindParameter jest zazwyczaj wygodniejsze i nie wymaga jawnego deskryptora dostępu w większości przypadków. Ta metoda jest zgodna z definicją SQLBindParameter w przypadku innych typów danych z tą różnicą, że dla parametru wartości w tabela pola deskryptora usterce są nieco inne.

Czasami aplikacja używa parametru wartości tabela z dynamicznych SQL i nazwa typu parametru wartości tabela musi zostać określona.Jeśli tak jest a parametr wycenione tabela nie zdefiniowano bieżącego domyślnego schematu dla połączenia, SQL_CA_SS_TYPE_CATALOG_NAME i SQL_CA_SS_TYPE_SCHEMA_NAME muszą być ustawione przy użyciu SQLSetDescField. Ponieważ tabela definicje typów i wycenione tabeli parametrów muszą być w tej samej bazie danych, nie może być SQL_CA_SS_TYPE_CATALOG_NAME zestaw Jeśli aplikacja używa wartości w tabeli parametrów.W przeciwnym razie SQLSetDescField zgłosi błąd.

Przykładowy kod w tym scenariuszu jest w procedurze demo_fixed_table-valued parameter_binding w the sample application.

Tabela Valued parametr z wierszy strumienia (Wyślij dane jako TVP, przy użyciu danych przy wykonywaniu)

W tym scenariuszu aplikacja dostarcza wierszy do sterownika, zgodnie z ich żądania i są one przesyłane strumieniowo do serwera.Pozwala to uniknąć konieczności bufora wszystkie wiersze w pamięci.Jest to przedstawiciel scenariuszy wstawienie/aktualizacja zbiorcza.Wartości tabela parametry zapewniają punktu wydajności gdzieś między tablic parametrów i zbiorczego kopiowania.Oznacza to około łatwa w programie jako parametr tablice są wyceniane tabela parametry, ale zapewniają one większą elastyczność w serwerze.

Parametr wycenione tabela i jej kolumn są powiązane, zgodnie z opisem w poprzedniej sekcji, parametr tabela-Valued w pełni powiązania multirow bufory, ale jest wskaźnik długość parametru wartości tabela sam zestaw do SQL_DATA_AT_EXEC.Sterownik odpowiada SQLExecute lub SQLExecuteDirect w zwykły sposób danych na wykonanie parametrów — to znaczy, przywracając SQL_NEED_DATA. Gdy sterownik jest gotowy do akceptowania danych dla parametru wartości tabela SQLParamData Zwraca wartość ParameterValuePtr w SQLBindParameter.

Aplikacja używa SQLPutData dla parametru wartości tabela do wskazania dostępność danych dla parametru wartości tabela składowe kolumn. Kiedy SQLPutData nazywa się dla parametru wartości tabela DataPtr zawsze musi zawierać wartość null i StrLen_or_Ind musi być 0 lub liczby mniejsze lub równe określony dla parametru wartości tabela buforów (rozmiar tablicy ColumnSize Parametr SQLBindParameter). 0 oznacza brak dla parametru wartości w tabela nie ma więcej wierszy i sterownik będzie kontynuował proces do następnego parametru rzeczywiste procedury.Kiedy StrLen_or_Ind to nie 0, sterownik będzie przetwarzać kolumn składowe parametru wartości tabela w taki sam sposób, jak parametr wycenione non–tabela powiązane parametry: Każda kolumna wartości tabela parametr można określić długość danych rzeczywistych, SQL_NULL_DATA, lub można go określić dane w wykonanie za pośrednictwem jej wskaźnik/długości buforu. Wartości kolumna wartości w tabela parametrów mogą być przekazywane do wywołań powtarzających się SQLPutData w zwykły sposób po znaku lub wartość binarną jest przekazywane w kawałkach.

Wszystkie kolumny parametru wartości w tabela zostały przetworzone, sterownik zwraca do parametru wartości tabela do dalszego przetwarzania wierszy danych parametru wartości w tabela.W związku z tym dla parametrów wycenione tabela danych na wykonanie sterownik nie wykonaj zwykłe skanowania kolejnych parametrów związanych.Powiązania parametru wartości tabela będzie sondowany do SQLPutData jest wywoływana z StrLen_Or_IndPtr równy 0, w którym czas sterownika pomija parametr wycenione tabela kolumn i przechodzi do następnego parametr rzeczywiste procedura przechowywana. Kiedy SQLPutData przechodzi wskaźnik wartość większą niż lub równa 1, sterownik przetwarza parametr wycenione tabela kolumny i wiersze kolejno, dopóki nie ma wartości dla wszystkich związanych wierszy i kolumn. Sterownik zwraca do parametru wartości w tabela.Między odbierania tokenem dla parametru wartości tabela z SQLParamData i telefonicznej SQLPutData(hstmt, NULL, n) dla parametru wartości w tabela aplikacja musi ustawić parametr wycenione tabela składowe kolumna zawartość buforu danych i wskaźników do następnego wiersza lub wierszy, które mają być przekazywane do serwera.

Przykładowy kod w tym scenariuszu jest procedura demo_variable_table-valued parameter_binding w the sample application.

Pobieranie tabela Valued parametr metadane z katalogu systemu

Gdy aplikacja wywołuje SQLProcedureColumns procedury parametr wycenione tabela parametrami zwracana jest DATA_TYPE SQL_SS_TABLE i TYPE_NAME jest nazwa tabela typu parametru wartości w tabela. Dwa dodatkowe kolumny są dodawane do zestaw wyników zwróconych przez SQLProcedureColumns: SS_TYPE_CATALOG_NAME zwraca nazwę katalogu, w którym zdefiniowano tabela parametru wartości z tabela i SS_TYPE_SCHEMA_NAME zwraca nazwę schematu w przypadku gdy gdzie zdefiniowano tabela parametru wartości z tabela. Zgodnie ze specyfikacją ODBC SS_TYPE_CATALOG_NAME i SS_TYPE_SCHEMA_NAME pojawiają się przed wszystkie kolumny określonego sterownika, które zostały dodane w poprzednich wersjach SQL Server, a po wszystkich kolumnach upoważnionych przez ODBC sam.

Nowe kolumny będzie się pusta, nie tylko dla parametrów wycenione tabela, ale dla środowiska CLR parametrów typ zdefiniowany przez użytkownika.Istniejącego schematu i kolumn wykazu parametrów UDT nadal będzie być wypełniane, ale o wspólnej kolumny schematu i katalog dla typów danych, które tego wymagają uprości projektowanie aplikacji w przyszłości.(Należy zauważyć, że kolekcje schematu XML są nieco inne i nie są zawarte w tej zmiany).

Aplikacja używa SQLTables do określenia nazwy typów tabela taki sam sposób, nie tabele stałe, tabele systemowe i widoki. Aby włączyć aplikację do identyfikowania typy tabel związanych z parametrami wycenione tabela wprowadza się nowy typ tabela, typ tabela.Typy tabel i zwykłymi tabelami korzystają z różnymi obszarami nazw.Oznacza to, że można używać tej samej nazwie, zarówno dla tabela, jak i tabela rzeczywistą.Aby obsługiwać ten, nowy atrybut instrukcja, SQL_SOPT_SS_NAME_SCOPE, została wprowadzona.Ten atrybut określa, czy SQLTables i innych funkcji wykazu, której nazwę tabela, jako parametr powinien zinterpretować nazwy tabela, jako nazwa tabela, rzeczywista lub nazwa tabela.

An application uses SQLColumns to determine the columns for a table type in the same way it does for persistent tables, but must first set SQL_SOPT_SS_NAME_SCOPE to indicate that it is working with table types rather than actual tables.SQLPrimaryKeys can also be used with table types, again using SQL_SOPT_SS_NAME_SCOPE.

Przykładowy kod w tym scenariuszu jest procedura demo_metadata_from_catalog_APIs w the sample application.

Pobieranie tabela Valued parametr metadane dla gotowa instrukcja

W tym scenariuszu aplikacja używa SQLNumParameters i SQLDescribeParam Aby pobrać metadane dla wartości w tabela parametrów.

Pole IPD SQL_CA_SS_TYPE_NAME jest używane do pobierania nazwy typu parametru wartości w tabela.Pola IPD SQL_CA_SS_TYPE_SCHEMA_NAME i SQL_CA_SS_TYPE_CATALOG_NAME są używane do pobierania jej katalogu i schemat, odpowiednio.

Table type definitions and table-valued parameters must be in the same database.SQLSetDescField will report an error if an application sets SQL_CA_SS_TYPE_CATALOG_NAME when using table-valued parameters.

SQL_CA_SS_TYPE_CATALOG_NAME i SQL_CA_SS_TYPE_SCHEMA_NAME można również pobrać z wykazu i skojarzone z parametrów zdefiniowanych przez użytkownika typu CLR schematu.SQL_CA_SS_TYPE_CATALOG_NAME i SQL_CA_SS_TYPE_SCHEMA_NAME są rozwiązania alternatywne w stosunku do istniejących atrybutów schematu katalogu określonego typu dla typu CLR UDT.

Aplikacja używa SQLColumns Aby pobrać kolumny metadane dla parametru wartości tabela w tym scenariuszu, ponieważ SQLDescribeParam nie zwraca metadane dla kolumn Kolumna wartości w tabela parametrów.

Przykładowy kod w tym przypadek użycia jest procedura demo_metadata_from_prepared_statement w the sample application.

See Also

Concepts