Udostępnij za pośrednictwem


Transferu powiązania i danych z wartościami przechowywanymi w tabeli parametry i wartości kolumn

Musi być powiązana oródwierszową parametry, podobnie jak inne parametry, zanim zostaną one przekazane do serwera.Aplikacja wiąże tabela-wycenione parametry samo wiąże ona innych parametrów: za pomocą SQLBindParameter lub równoważne wywołania SQLSetDescField lub SQLSetDescRec.Typ danych serwera dla tabela-parametr wyceniane jest SQL_SS_tabela.C typu może być określony jako SQL_C_DEFAULT lub SQL_C_BINARY.

W SQL Server 2008 lub tylko wprowadzania później, tabela-parametry wyceniane są obsługiwane.Dlatego też próby zestaw SQL_DESC_PARAMETER_TYPE na wartość inną niż SQL_PARAM_INPUT zwróci wartość SQL_ERROR z SQLSTATE = HY105 i komunikat "nieprawidłowy parametr typu".

Cała tabela-parametr wyceniane kolumn można przypisać wartości domyślne za pomocą atrybut SQL_CA_SS_COL_HAS_DEFAULT_VALUE.Poszczególne tabela-wartości parametru wyceniane kolumn, jednak nie można przypisać wartości domyślne przy użyciu SQL_DEFAULT_PARAM w StrLen_or_IndPtr z SQLBindParameter.Parametry oródwierszową jako całości, nie zestaw wartość domyślną przy użyciu SQL_DEFAULT_PARAM w StrLen_or_IndPtr z SQLBindParameter.Jeśli zasady te nie są przestrzegane, SQLExecute lub SQLExecDirect zwróci wartość SQL_ERROR.Diagnostyczne rekord zostanie wygenerowany z SQLSTATE = 07S01 i komunikat "nieprawidłowe użycie domyślnego parametru dla parametru <p>", gdzie <p> jest numerem porządkowym TVP w instrukcja kwerendy.

Po wiązania tabela-parametr ważnych aplikacji musi następnie powiązać każdego tabela-parametr wyceniane kolumna.W tym celu pierwszego wywołania aplikacji SQLSetStmtAttr Aby liczba porządkowa SQL_SOPT_SS_PARAM_FOCUS tabela-wyceniana parametru.Aplikacja wiąże kolumny, a następnie tabela-parametr wyceniane przez wywołania do następujących procedur: SQLBindParameter, SQLSetDescRec, and SQLSetDescField.Ustawienie SQL_SOPT_SS_PARAM_FOCUS 0 przywraca zwykły efekt SQLBindParameter, SQLSetDescRec, i SQLSetDescField w działających na regularne parametry najwyższego poziom.

Brak danych rzeczywistych jest wysyłane lub odbierane dla tabela-wyceniane parametr sam, ale dane jest wysyłanych i odbieranych dla każdego z jego składowe kolumn.Ponieważ tabela-parametr wyceniane jest kolumną pseudo parametry SQLBindParameter są używane do odwoływania się do różnych atrybutów niż inne typy danych w następujący sposób:

Parametr

Atrybut pokrewne typy parametrów wycenione non–tabela, łącznie z kolumn

Pokrewne atrybut tabela-wycenione parametrów

InputOutputType

SQL_DESC_PARAMETER_TYPE w IPD.

Dla tabela-wyceniane parametr kolumny, to musi być taka sama jak ustawienie tabela-wyceniane parametr sam.

SQL_DESC_PARAMETER_TYPE w IPD.

Musi to być SQL_PARAM_INPUT.

ValueType

SQL_DESC_TYPE, SQL_DESC_CONCISE_TYPE w APD.

SQL_DESC_TYPE, SQL_DESC_CONCISE_TYPE w APD.

Musi to być SQL_C_DEFAULT lub SQL_C_BINARY.

ParameterType

SQL_DESC_TYPE SQL_DESC_CONCISE_TYPE w IPD.

SQL_DESC_TYPE SQL_DESC_CONCISE_TYPE w IPD.

Musi to być SQL_SS_TABLE.

ColumnSize

SQL_DESC_LENGTH lub SQL_DESC_PRECISION w IPD.

Zależy to od wartości ParameterType.

SQL_DESC_ARRAY_SIZE

Można również ustawić za pomocą SQL_ATTR_PARAM_SET_SIZE, gdy parametr fokus jest ustawiony na tabela-parametr wycenione.

Parametr z wartościami przechowywanymi w tabela jest to liczba wierszy w buforach kolumna parametr oródwierszową.

DecimalDigits

SQL_DESC_PRECISION lub SQL_DESC_SCALE w IPD.

Nieużywane.Musi to być 0.

Jeśli ten parametr nie jest 0, SQLBindParameter zwróci wartość SQL_ERROR i diagnostycznych rekord zostanie wygenerowany z SQLSTATE = HY104 i komunikat "nieprawidłowy precyzji i skali".

ParameterValuePtr

SQL_DESC_DATA_PTR w APD.

SQL_CA_SS_TYPE_NAME.

Opcjonalnie dla wywołań procedura składowana i NULL może być określony, jeśli nie jest wymagany.Każde pozwolenie na wywóz musi być określona dla instrukcji SQL, które nie są wywołaniami procedury.

Ten parametr służy również jako unikatową wartość, która aplikacja umożliwia identyfikację to tabela-wyceniane parametru użyto zmiennej wiersza powiązania.Aby uzyskać więcej informacji zobacz "zmiennej Table-Valued parametr wiersza wiązaniem" sekcja w dalszej części tego tematu.

Gdy tabela-nazwa typu parametru wyceniane jest określona na wywołanie SQLBindParameter, musi być określona jako wartość Unicode, nawet w przypadku aplikacji, które są wbudowane, jak aplikacje ANSI.Wartość parametru StrLen_or_IndPtr powinien być SQL_NTS lub długość ciąg nazwy, pomnożonej przez sizeof(WCHAR).

BufferLength

SQL_DESC_OCTET_LENGTH w APD.

Długość tabela-nazwa typu parametru wyceniane w bajtach.

Może to być SQL_NTS, jeśli nazwa typu jest null, zakończone lub jeśli 0 tabela-wyceniane parametr typu nazwa nie jest wymagana.

StrLen_or_IndPtr

SQL_DESC_OCTET_LENGTH_PTR w APD.

SQL_DESC_OCTET_LENGTH_PTR w APD.

Parametry z wartościami przechowywanymi w tabela jest to liczba wierszy niż długość danych.

Tryby przenoszenia danych z dwóch obsługiwane są wartościami przechowywanymi w tabela parametrów: stałe powiązanie wiersza i powiązanie zmiennej wiersza.

Stałe powiązanie oródwierszową parametr wiersza

Dla wiersza stałych powiązanie aplikacji przydziela bufory (lub tablice buforu) wystarczająco duże, aby wszystkie możliwe kolumna wprowadzania wartości.Aplikacja wykonuje następujące czynności:

  1. Wiąże wszystkie parametry za pomocą SQLBindParameter, SQLSetDescRec, lub SQLSetDescField wywołań.

    1. Ustawia maksymalną liczbę wierszy, które mogą być przenoszone dla każdego parametru wartościami przechowywanymi w tabela SQL_DESC_ARRAY_SIZE.Można to zrobić w SQLBindParameter wywołania.
  2. Wywołania SQLSetStmtAttr ustawić porządkowym każdego SQL_SOPT_SS_PARAM_FOCUS tabela-wyceniana parametr.

    1. Dla każdego tabela-wiąże wyceniane parametr tabela-wycenione parametr kolumny za pomocą SQLBindParameter, SQLSetDescRec, lub SQLSetDescField wywołań.

    2. Dla każdego tabela-wyceniane parametr kolumna, która ma mieć wartości domyślne wywołuje SQLSetDescField do SQL_CA_SS_COL_HAS_DEFAULT_VALUE ustaw wartość 1.

  3. Wywołania SQLSetStmtAttr do zestaw SQL_SOPT_SS_PARAM_FOCUS 0.Należy to zrobić przed SQLExecute lub SQLExecDirect jest wywoływana.W przeciwnym wypadku zwracana jest wartość SQL_ERROR i diagnostycznych rekord jest generowana z SQLSTATE = HY024 i komunikat "Nieprawidłowa wartość atrybutu, SQL_SOPT_SS_PARAM_FOCUS (musi być równe zero w wykonanie czas)".

  4. Sets StrLen_or_IndPtr or SQL_DESC_OCTET_LENGTH_PTR to SQL_DEFAULT_PARAM for a table-valued parameter with no rows, or the number of rows to be transferred on the next call of SQLExecute or SQLExecDirect if the table-valued parameter has rows.StrLen_or_IndPtr or SQL_DESC_OCTET_LENGTH_PTR cannot be set to SQL_NULL_DATA for a table-valued parameter as table-valued parameters are not nullable (though table-valued parameter constituent columns may be nullable).Jeśli jest to zestaw Nieprawidłowa wartość SQLExecute lub SQLExecDirect zwraca wartość SQL_ERROR i diagnostycznych rekord jest generowana z SQLSTATE = HY090 i komunikat "Nieprawidłowa długość ciąg lub buforu parametru <p>", gdzie p jest liczbą parametrów.

  5. Calls SQLExecute or SQLExecDirect.

Wprowadzania tabela-wyceniane parametru wartości kolumna mogą być przekazane w kawałkach, jeśli StrLen_or_IndPtr jest ustawiona na SQL_LEN_DATA_AT_EXEC (length) lub SQL_DATA_AT_EXEC dla kolumna.Jest to podobne przekazywanie wartości w kawałkach, gdy używane są tablic parametrów.Podobnie jak w przypadku wszystkich parametrów danych na wykonanie, SQLParamData nie wskazuje, który wiersz tablicy sterownik żąda danych; Aplikacja musi zadbać tego.Aplikacja nie można wprowadzać żadnych założeń o zamówieniu, w którym sterownik będzie żądał wartości.

Zmienna oródwierszową wiązania parametr wiersza

powiązanie wiersza zmiennej wiersze są przenoszone w partiach o wykonanie czas i aplikacja przekazuje wierszy do sterownika na żądanie.Jest to podobne do danych na wykonanie wartości poszczególnych parametrów.powiązanie wiersza zmiennej aplikacji wykonuje następujące czynności:

  1. Powiązanie parametry i oródwierszową parametr kolumny, jak opisano w krokach 1 i 3 w poprzedniej sekcji "Stała tabela-Valued parametr wiersza wiązaniem".

  2. Zestawy StrLen_or_IndPtr lub SQL_DESC_OCTET_LENGTH_PTR oródwierszową parametrów, które są przekazywane na wykonanie czas do SQL_DATA_AT_EXEC.Jeśli nie jest zestaw, parametr będą przetwarzane w sposób opisany w poprzedniej sekcji.

  3. Calls SQLExecute or SQLExecDirect.Zwróci SQL_NEED_DATA, jeśli nie ma żadnych SQL_PARAM_INPUT lub SQL_PARAM_INPUT_OUTPUT parametry, które mają być obsługiwane parametry jako danych na wykonanie.przypadek aplikacji wykonuje następujące czynności:

    • Calls SQLParamData.Zwraca to ParameterValuePtr wartość parametru danych na wykonanie i zwrócony kod SQL_NEED_DATA.Gdy wszystkie dane parametr został przekazany do sterownika, SQLParamData zwraca SQL_SUCCESS, wartość SQL_SUCCESS_WITH_INFO lub wartość SQL_ERROR.Wykonywanie w danych parametrów ParameterValuePtr, który jest taki sam deskryptor pole SQL_DESC_DATA_PTR, może być traktowane jako token do jednoznacznego identyfikowania parametru, dla których wymagana jest wartość."Token ten" jest przekazywana z aplikacji do sterownika na powiązania czas, następnie przekazywana z powrotem do aplikacji na wykonanie czas.
  4. Wysyłanie tabela-wycenione parametr wiersza danych dla wartości null tabela-wycenione parametrów, jeśli tabela-wyceniane parametr nie ma żadnych wierszy, aplikacja wywołuje SQLPutData z StrLen_or_Ind ustawiona na SQL_DEFAULT_PARAM.

    Dla nie - NULL TVPs, aplikacja:

    • Zestawy Str_Len_or_Ind dla wszystkich kolumn oródwierszową parametru na odpowiednie wartości i wypełnia bufory danych dla parametru wartościami przechowywanymi w tabela kolumn, które nie mają być parametry danych na wykonanie.Można użyć danych na wykonanie dla tabela-wyceniana parametr kolumny w podobny sposób do, w którym parametry zwykłe mogą być przekazywane do sterownika w kawałkach.

    • Wywołania SQLPutData z Str_Len_or_Ind zestaw liczbę wierszy, które mają być wysyłane do serwera.Każda wartość spoza zakres od 0 do SQL_DESC_ARRAY_SIZE lub SQL_DEFAULT_PARAM jest błąd i zwróci SQLSTATE HY090 z komunikatem "Nieprawidłowa długość ciąg lub buforu".wartość 0 wskazuje, że wszystkie wiersze zostały wysłane i nie ma więcej danych dla tabela-wycenione parametr (jak zauważono w drugiej element punktor na liście).SQL_DEFAULT_PARAM może być używany tylko pierwszy czas sterownik żąda danych dla parametru oródwierszową (jak opisano w pierwszym elemencie punktora na tej liście).

  5. Gdy wszystkie wiersze zostały wysłane, wywołuje SQLPutData dla tabela-wyceniane parametru z Str_Len_or_Ind wartość 0, a następnie przechodzi do krok 3a powyżej.

  6. Wywołania SQLParamData ponownie.Jeśli wszystkie parametry danych na wykonanie między wartościami przechowywanymi w tabela parametr kolumny, te będą identyfikowane przez wartość ValuePtrPtr zwrócone przez SQLParamData.Gdy wszystkie wartości kolumna są dostępne, SQLParamData ponownie zwróci ParameterValuePtr wartość dla tabela-parametr wyceniane i aplikacja rozpoczyna się ponownie.

Zobacz także

Koncepcje