Udostępnij za pośrednictwem


Używa parametrów oródwierszową ODBC

W tym temacie omówiono użytkownika podstawowe scenariusze korzystania z tabela-wycenione parametrów z ODBC:

  • Parametr oródwierszową pełni związanego buforów Multirow (Wyślij dane jako TVP ze wszystkimi wartościami w pamięci)

  • Parametr oródwierszową wiersza Streaming (Wyślij dane jako TVP przy użyciu danych na wykonanie)

  • Pobieranie metadanych oródwierszową parametr z wykazu systemu

  • Pobieranie metadanych oródwierszową parametr dla przygotowanych instrukcji

Parametr oródwierszową pełni związanego buforów Multirow (Wyślij dane jako TVP ze wszystkimi wartościami w pamięci)

Gdy używana z buforów multirow pełni związanego, wszystkie wartości parametru są dostępne w pamięci.Jest to typowy, na przykład dla transakcji OLTP, w którym parametry z wartościami przechowywanymi w tabela mogą być pakowane w ramach jednej procedura składowana.Bez tabela-parametry wyceniane wymagałoby to dynamicznego generowania złożonych złożonych z wielu instrukcja partia albo wiele połączeń z serwerem.

tabela-Powiązane przy użyciu parametru wyceniane, sam SQLBindParameter wraz z innymi parametrami.Po powiązane wszystkie parametry aplikacji Ustawia atrybut fokus parametru SQL_SOPT_SS_PARAM_FOCUS, każdego tabela-wycenione parametr i wywołania SQLBindParameter kolumny z tabela-wyceniana parametr.

Typ serwera dla tabela-parametr wyceniane jest nowy SQL Server-określonego typu, SQL_SS_tabela.powiązanie typu c dla SQL_SS_TABLE musi być zawsze SQL_C_DEFAULT.Dane nie są przenoszone do tabela-parametr wyceniane powiązane parametr; Służy do przekazywania metadane tabela i do kontrolowania sposobu przekazywania danych w kolumnach składowe parametru oródwierszową.

Długość tabela-wyceniane parametr jest ustawiony na liczbę 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 wymagane dla wywołania procedura składowana, ale jest to wymagane dla instrukcji SQL.

Gdy tabela-nazwa typu parametru wyceniane jest określona na wywołanie SQLBindParameter, zawsze musi być określona jako wartość Unicode, nawet w przypadku aplikacji, które są wbudowane, jak aplikacje ANSI.Podczas określania tabela-nazwa typu parametru wyceniane przy użyciu SQLSetDescField, można użyć literału zgodnego sposób aplikacji jest wbudowana.Menedżer sterowników ODBC będzie wykonywać wszelkie wymagane Konwersja Unicode.

Metadane dla tabela-wycenione parametrów i tabela-parametr wyceniane kolumn można manipulować oddzielnie i wyraźnie za pomocą SQLGetDescRec, SQLSetDescRec, SQLGetDescField, i SQLSetDescField.Jednakże przeciążenie SQLBindParameter jest zazwyczaj wygodniejsze i nie wymaga dostępu do jawnych deskryptora w większości przypadków.Podejście to jest zgodne z definicją SQLBindParameter dla innych typów danych, z wyjątkiem dla tabela-parametr wyceniane są nieco inne pola dotyczy deskryptora.

Czasami aplikacja używa tabela-wyceniane parametru z dynamicznego SQL i nazwę typu tabela-wyceniane parametru muszą być dostarczone.Jeśli tak jest parametr wartościami przechowywanymi w 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ć zestaw za pomocą SQLSetDescField.Ponieważ definicje typów tabela i oródwierszową parametry muszą być w tej samej bazie danych, nie może być SQL_CA_SS_TYPE_CATALOG_NAME zestaw Jeśli aplikacja używa parametrów oródwierszową.W przeciwnym razie SQLSetDescField zgłosi błąd.

Przykładowy kod w tym scenariuszu jest w procedurze demo_fixed_table-valued parameter_binding w przykładowej aplikacji dostępnych w witrynie CodePlex; zobacz SQL ServerPrzykładowe aparat bazy danych Aby uzyskać więcej informacji...

Parametr oródwierszową wiersza Streaming (Wyślij dane jako TVP przy użyciu danych na wykonanie)

W tym scenariuszu aplikacja dostaw wierszy do sterownika, jak ich żądania i są przesyłane strumieniowo do serwera.Pozwala to uniknąć konieczności w pamięci buforu wszystkie wiersze.Jest przedstawicielem scenariuszy Wstawianie i aktualizacja zbiorcza.Parametry oródwierszową zapewniają wydajność punktu gdzieś pomiędzy tablic parametrów i kopiowanie masowe.Oznacza to, że około łatwy do programu jako tablic parametrów są wyceniane w tabela parametry, ale zapewniają większą elastyczność na serwerze.

Parametr wartościami przechowywanymi w tabela i jej kolumn są powiązane, omówionego w poprzedniej sekcji parametru tabela-Valued w pełni powiązana Multirow bufory, ale wskaźnik długość parametru oródwierszową sam jest zestaw do SQL_DATA_AT_EXEC.Sterownik odpowiada SQLExecute lub SQLExecuteDirect w zwykły sposób wykonywanie w danych parametrów — czyli przywracając SQL_NEED_DATA.Gdy sterownik jest gotowy do akceptowania danych dla parametru z wartościami przechowywanymi w tabela SQLParamData zwraca wartość ParameterValuePtr w SQLBindParameter.

Aplikacja używa SQLPutData dla tabela-wyceniane parametr oznaczający dostępność danych dla tabela-wyceniana parametr składowe kolumn.Po SQLPutData jest wywoływana dla parametru z wartościami przechowywanymi w tabela DataPtr zawsze może być null i StrLen_or_Ind musi być 0 lub liczbę mniejszą niż rozmiar tablicy określona dla parametru oródwierszową buforów ( ColumnSize parametr SQLBindParameter).0 oznacza są nie ma więcej wierszy dla tabela-parametr wyceniane i sterownik będzie kontynuować procesu do następnego parametru procedury rzeczywiste.Gdy StrLen_or_Ind jest nie 0 sterownik będzie przetwarzać kolumn składowe oródwierszową parametr w taki sam sposób jak parametr non–tabela-valued powiązane parametry: Każdy tabela-kolumny wyceniane parametru można określić długość danych rzeczywistych, SQL_NULL_DATA, lub można określić, dane na wykonanie przez długość i wskaźnik buforu.Parametr oródwierszową kolumna wartości mogą być przekazane przez wielokrotne wywołania SQLPutData w zwykły sposób, gdy znak lub wartość binarna jest przekazywane w kawałkach.

Podczas przetwarzania wszystkie kolumny z wartościami przechowywanymi w tabela parametr sterownika zwraca się do parametru oródwierszową do dalszego przetwarzania wierszy danych parametru oródwierszową.Dlatego parametrów z wartościami przechowywanymi w tabela danych na wykonanie sterownika nie wykonaj zwykły kolejne skanowania parametry związane.Parametr związanego z oródwierszową będzie sondowany aż do SQLPutData wywołana z StrLen_Or_IndPtr równe 0, w którym czas sterownik pomija parametr oródwierszową kolumn i przenosi do następnego parametr rzeczywiste procedura składowana.Gdy SQLPutData przekazuje wartość wskaźnika większe lub równe 1, procesy sterownika tabela-sekwencyjnie wycenione parametr kolumn i wierszy, dopóki nie ma wartości dla wszystkich związanego wiersze i kolumny.Sterownik i powraca do tabela-parametr wycenione.Między odbierania tokenem tabela-wyceniane parametru z SQLParamData i wywoływania SQLPutData(hstmt, NULL, n) dla tabela-parametr wyceniane, aplikacja musi ustawić tabela-parametr wyceniane składowe kolumna danych i wskaźnik buforu treści następny wiersz lub wiersze, które mają być przekazywane do serwera.

Przykładowy kod w tym scenariuszu jest w rutynowych demo_variable_table-valued parameter_binding w przykładowej aplikacji dostępnych w witrynie CodePlex; zobacz SQL ServerPrzykładowe aparat bazy danych Aby uzyskać więcej informacji...

Pobieranie metadanych oródwierszową parametr z wykazu systemu

Gdy aplikacja wywołuje SQLProcedureColumns dla procedury, która oródwierszową parametr parametry, zwracana jest DATA_TYPE, SQL_SS_TABLE i TYPE_NAME jest nazwa tabela dla parametru oródwierszową.Dwa dodatkowe kolumny są dodawane do zestaw wyników zwrócone przez SQLProcedureColumns: SS_TYPE_CATALOG_NAME zwraca nazwę katalogu, w którym zdefiniowano tabela parametr wartość tabela i SS_TYPE_SCHEMA_NAME zwraca nazwę schematu gdzie gdzie typ tabela tabela wartość parametru jest zdefiniowany.Zgodnie ze specyfikacją ODBC SS_TYPE_CATALOG_NAME i SS_TYPE_SCHEMA_NAME są wyświetlane przed wszystkie kolumny określonego sterownika, które zostały dodane w poprzednich wersjach SQL Serveri po wszystkich kolumn nakazanych ODBC sam.

Nowe kolumny zostaną wypełnione, nie tylko dla parametrów oródwierszową, ale dla środowiska CLR typ zdefiniowany przez użytkownika parametry.Istniejącego schematu i kolumn wykazu parametrów UDT nadal będzie wypełniane, ale posiadające dla typów danych, które wymagają wspólnych kolumn schematu i wykazu uprości rozwoju aplikacji w przyszłości.(Należy zauważyć, że kolekcje schematu XML są różne i nie są uwzględnione w tej zmiany).

Aplikacja używa SQLTables do określenia nazwy tabela typów w taki sam sposób do trwałego tabel tabele systemowei widoki.Aby umożliwić aplikacji zidentyfikować typy tabel związanych z wartościami przechowywanymi w tabela parametry wprowadza się nowy typ tabela Typ tabela.Typy tabel i zwykłymi tabelami należy użyć różnych obszarów nazw.Oznacza to, że można używać tej samej nazwy tabela i tabela rzeczywistą.Aby obsłużyć to, wprowadzono nowy atrybut instrukcja SQL_SOPT_SS_NAME_SCOPE.Ten atrybut określa, czy SQLTables i inne funkcje wykazu, których podjęcie Nazwa tabela jako parametr należy interpretować jako nazwa rzeczywistej tabela nazwę tabela lub nazwa typu 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 w rutynowych demo_metadata_from_catalog_APIs w przykładowej aplikacji dostępnych w witrynie CodePlex; zobacz SQL ServerPrzykładowe aparat bazy danych Aby uzyskać więcej informacji...

Pobieranie metadanych oródwierszową parametr dla przygotowanych instrukcji

W tym scenariuszu aplikacja używa SQLNumParameters i SQLDescribeParam do pobierania metadane dla tabela-wyceniana parametry.

SQL_CA_SS_TYPE_NAME jest używana do pobierania wpisz nazwę dla pola IPD tabela-parametr wycenione.Pola IPD, SQL_CA_SS_TYPE_SCHEMA_NAME i SQL_CA_SS_TYPE_CATALOG_NAME są używane do pobierania jej wykazu 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 schemat skojarzone CLR typ zdefiniowany przez użytkownika parametry.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 wykazu określonego typu CLR UDT typów.

Aplikacja używa SQLColumns do pobierania metadane kolumna dla parametru oródwierszową w tym scenariuszu, ponieważ SQLDescribeParam nie zwraca metadane dla kolumna z kolumna z wartościami przechowywanymi w tabela parametru.

Przykładowy kod ten przypadek użycia jest rutynowych, demo_metadata_from_prepared_statement, w przykładowej aplikacji dostępnych w witrynie CodePlex; zobacz SQL ServerPrzykładowe aparat bazy danych więcej informacji.

Zobacz także

Koncepcje