Udostępnij za pośrednictwem


wiązanie danych i Transfer Valued tabela parametrów i wartości kolumna

Musi być powiązana wycenione tabela parametry, podobnie jak inne parametry, zanim zostaną one przekazane do serwera.Aplikacja wiąże wartości w tabela parametrów taki sam sposób, jak go wiąże innych parametrów: za pomocą SQLBindParameter lub równoważne wywołania SQLSetDescField lub SQLSetDescRec. Typ danych serwera dla parametru wartości w tabela jest SQL_SS_TABLE.Typ C może zostać określony jako SQL_C_DEFAULT lub SQL_C_BINARY.

W SQL Server 2008, obsługiwane są tylko wartości w tabela parametrów wejściowych. Dlatego każda próba zestaw SQL_DESC_PARAMETER_TYPE na wartość inną niż SQL_PARAM_INPUT zwróci SQL_ERROR z SQLSTATE = HY105 i komunikat "nieprawidłowy parametr typu".

Cały parametr wycenione tabela kolumny można przypisać wartości domyślne przy użyciu atrybut SQL_CA_SS_COL_HAS_DEFAULT_VALUE.Wartości kolumna poszczególnych wartości w tabela parametrów, jednak nie można przypisać wartości domyślne przy użyciu SQL_DEFAULT_PARAM w StrLen_or_IndPtr z SQLBindParameter. Parametry wartości tabela jako całości, nie zestaw na wartość domyślną przy użyciu SQL_DEFAULT_PARAM w StrLen_or_IndPtr z SQLBindParameter. Jeśli zasady te nie zostały wykonane, SQLExecute lub SQLExecDirect Zwraca SQL_ERROR. Diagnostyczne rekordu zostaną wygenerowane przy użyciu SQLSTATE = 07S01 i komunikat "nieprawidłowe użycie domyślnego parametru dla parametru <p>", gdzie <p> to liczba porządkowa z TVP w instrukcja kwerendy.

Po wiążącym parametru wartości w tabela, aplikacja musi następnie powiązać każda kolumna wartości w tabela parametrów.Aby to zrobić, aplikacja najpierw wywołuje SQLSetStmtAttr Aby ustawić SQL_SOPT_SS_PARAM_FOCUS liczba porządkowa parametru wartości w tabela. Następnie aplikacja wiąże kolumn parametru wartości tabela przez wywołania z następujących procedur: SQLBindParameter, SQLSetDescRec, a SQLSetDescField. Ustawienie SQL_SOPT_SS_PARAM_FOCUS 0 przywraca zwykły efekt SQLBindParameter, SQLSetDescRec, a SQLSetDescField Podczas operacji na regularne parametrów najwyższego poziom.

Nie rzeczywiste dane są wysyłane lub odbierane parametru wartości w tabela, sam, ale dane są wysyłane i odbierane dla każdej z kolumn składowych.Ponieważ parametr wycenione tabela jest kolumną pseudo parametrów dla SQLBindParameter są używane do odwoływania się do innych atrybutów niż inne typy danych w następujący sposób:

Parameter

Pokrewne atrybut dla typów wartości non–tabela parametru, włącznie z kolumnami

Atrybut powiązanych wartości w tabela parametrów

InputOutputType

SQL_DESC_PARAMETER_TYPE w IPD.

Dla parametru wartości w tabela kolumn to musi być taka sama jak ustawienie parametru wartości w tabela, 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 także zestaw parametr fokus jest ustawiony przy użyciu SQL_ATTR_PARAM_zestaw_SIZE zestaw do parametru wartości w tabela.

Parametru wartości w tabela jest to liczba wierszy w buforach kolumna parametru wartości w tabela.

DecimalDigits

SQL_DESC_PRECISION lub SQL_DESC_SCALE w IPD.

Nieużywane.Musi to być 0.

Jeśli ten parametr nie jest 0, SQLBindParameterZwraca wartość SQL_ERROR i diagnostyczne rekordu zostaną wygenerowane przy użyciu SQLSTATE = HY104 i komunikat "nieprawidłowy precyzji lub skali".

ParameterValuePtr

SQL_DESC_DATA_PTR w APD.

SQL_CA_SS_TYPE_NAME.

Jest to opcjonalne dla wywołań procedura przechowywana, a wartości NULL mogą być określone, jeśli nie jest to wymagane.Musi być określona dla instrukcji SQL, które nie są wywołań procedur.

Ten parametr służy również jako unikatowa wartość, aplikacja służy do identyfikowania parametru wartości w tabela, gdy jest używane wiązanie zmiennych wiersza.Aby uzyskać więcej informacji zobacz sekcję "" Zmienna tabela-Valued parametr wiersza wiązanie"w dalszej części tego tematu.

Jeśli nazwa typu parametru wartości tabela zostanie użyty na wywołanie SQLBindParameter, należy określić jako wartość Unicode, nawet w aplikacjach, które są wbudowane, jak aplikacje ANSI. Wartość używana w przypadku parametru StrLen_or_IndPtr powinna być SQL_NTS lub długość ciąg o nazwie pomnożona przez sizeof(WCHAR).

BufferLength

SQL_DESC_OCTET_LENGTH w APD.

Długość nazwy typu parametru wartości w tabela, w bajtach.

Może to być SQL_NTS, jeśli nazwa typu jest równa null, zakończone lub 0, jeśli nazwa typu parametru wartości w tabela nie jest wymagane.

StrLen_or_IndPtr

SQL_DESC_OCTET_LENGTH_PTR w APD.

SQL_DESC_OCTET_LENGTH_PTR w APD.

Wartości w tabela parametrów jest to liczba wierszy, a nie długość danych.

Dane z dwóch trybów transferu są obsługiwane dla wartości w tabela parametrów: stałe wiązanie wiersza i wiązanie zmiennych wiersza.

Stałe Valued tabela Wiersz parametru wiązanie

Dla wiązanie wiersza środka aplikacji przydziela bufory (lub tablice buforu) wystarczająco duże, aby wszystkie możliwe kolumna danych wejściowych wartości.Aplikacja wykonuje następujące czynności:

  1. Wiąże wszystkich parametrów przy użyciu SQLBindParameter, SQLSetDescRec, lub SQLSetDescField wywołania.

    1. Ustawia maksymalną liczbę wierszy, które mogą być przenoszone dla każdego parametru wartości tabela SQL_DESC_ARRAY_SIZE.Można to zrobić SQLBindParameter Wywołanie funkcji.
  2. Wywołania SQLSetStmtAttr Aby zestaw SQL_SOPT_SS_PARAM_FOCUS do liczba porządkowa każdego parametru wartości w tabela.

    1. Dla każdego parametru wartości w tabela powiązanie kolumn wartości w tabela parametrów przy użyciu SQLBindParameter, SQLSetDescRec, lub SQLSetDescField wywołania.

    2. Dla każdej kolumna parametru wartości w tabela, która ma mieć wartości domyślne wywołuje SQLSetDescField Aby zestaw SQL_CA_SS_COL_HAS_DEFAULT_VALUE na 1.

  3. Wywołania SQLSetStmtAttr Aby zestaw SQL_SOPT_SS_PARAM_FOCUS na 0. Czynność tę należy wykonać przed SQLExecute lub SQLExecDirect nazywa się. W przeciwnym razie zwracana jest SQL_ERROR i diagnostyczne rekord jest generowany z SQLSTATE = HY024 i komunikat "Nieprawidłowa wartość atrybut SQL_SOPT_SS_PARAM_FOCUS (musi być równa zero w czasie wykonywania)".

  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żeli to jest ustawiony na nieprawidłową wartość SQLExecute lub SQLExecDirectZwraca wygenerowany przy użyciu SQLSTATE SQL_ERROR i diagnostyczne rekordu = HY090 i komunikat „ nieprawidłowa długość ciąg lub buforu dla parametru <p>", gdzie p jest numerem parametru.

  5. Wywołania SQLExecute lub SQLExecDirect.

Parametr wejściowy wycenione tabela wartości kolumna mogą być przekazywane w sztukach, jeśli StrLen_or_IndPtr jest zestaw do SQL_LEN_DATA_AT_EXEC ()length) lub SQL_DATA_AT_EXEC dla kolumna. Jest podobna do przekazując wartości w kawałkach tablic parametry są używane.Jak z parametrami danych na wykonanie wszystkich SQLParamData nie wskazuje, który wiersz tablicy sterownik żąda danych; aplikacja musi zadbać o to. Aplikacja nie może wprowadzić żadnych założeń kolejności, w którym sterownik będzie żądał wartości.

Zmienna Valued tabela Wiersz parametru wiązanie

Dla wiązanie zmiennych wiersza wiersze są przenoszone w plikach wsadowych na wykonanie czas i aplikacja przekazuje wierszy do sterownika na żądanie.Jest to podobne do danych na wykonanie wartości poszczególnych parametrów.Dla wiązanie zmiennych wiersza aplikacja wykonuje następujące czynności:

  1. wiązanie parametry i parametr wycenione tabela kolumn, jak to opisano w krokach od 1 do 3 z poprzedniej sekcji, "Fixed tabela-Valued parametr wiersz wiązanie".

  2. Zestawy StrLen_or_IndPtr lub SQL_DESC_OCTET_LENGTH_PTR dla każdej wartości w tabela parametrów, które są przekazywane na wykonanie czas do SQL_DATA_AT_EXEC. Jeśli żadna z nich nie jest zestaw, ten parametr zostanie przetworzona zgodnie z opisem w poprzedniej sekcji.

  3. Wywołania SQLExecute lub SQLExecDirect. Będzie zwracać SQL_NEED_DATA, jeśli nie ma żadnych SQL_PARAM_INPUT lub SQL_PARAM_INPUT_OUTPUT parametry, które mają być traktowane jako danych na wykonanie parametrów.W tym przypadek aplikacja wykonuje następujące czynności:

    • Wywołania SQLParamData. Powoduje to zwrócenie ParameterValuePtr wartość parametru danych przy realizacji i kod zwracany przez SQL_NEED_DATA. Gdy wszystkie dane parametr został przekazany do sterownika, SQLParamData Zwraca SQL_SUCCESS, SQL_SUCCESS_WITH_INFO lub SQL_ERROR. Parametry danych na wykonanie ParameterValuePtr, który jest taki sam, jak deskryptora zabezpieczeń pole SQL_DESC_DATA_PTR, może być traktowane jako tokenu do unikatowego identyfikowania parametru, dla których wymagana jest wartość. To "tokenu" jest przekazywana z aplikacji do sterownika na powiązanie czas, następnie przekazywana z powrotem do aplikacji na wykonanie czas.
  4. Dane mają być przesyłane parametru wartości w tabela Wiersz zerowy parametrów wycenione tabela, jeśli parametr wycenione tabela nie ma żadnych wierszy, wywołuje aplikacji SQLPutData z StrLen_or_Ind zestaw do SQL_DEFAULT_PARAM.

    Dla innych niż-NULL TVPs, aplikacji:

    • Zestawy Str_Len_or_Ind we wszystkich kolumnach parametr wycenione tabela na odpowiednie wartości i wypełnia bufory danych dla parametru wartości w tabela kolumn, które nie mają być parametrami danych na wykonanie. Dla parametru wartości w tabela kolumn można użyć danych na wykonywanie w podobny sposób, w których zwykła parametrów mogą być przekazywane do sterownika w kawałkach.

    • Wywołania SQLPutData z Str_Len_or_Ind Ustaw liczbę wierszy do wysłania do serwera. Każda wartość spoza zakres od 0 do SQL_DESC_ARRAY_SIZE lub SQL_DEFAULT_PARAM jest błąd i zwróci HY090 SQLSTATE 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 parametru wartości tabela (w drugiej punktora element na tej liście).SQL_DEFAULT_PARAM można używać tylko po raz pierwszy, sterownik żąda danych dla parametru wartości tabela (zgodnie z opisem w pierwszej pozycji punktora na tej liście).

  5. Jeżeli wszystkie wiersze zostały wysłane, wywołuje SQLPutData dla parametru wartości tabela z Str_Len_or_Ind wartość 0, a następnie przychodów do krok 3a powyżej.

  6. Wywołania SQLParamData ponownie. W przypadku parametrów danych na wykonanie obu kolumnach parametru wartości w tabela, będą one identyfikowane przez wartość ValuePtrPtr zwrócone przez SQLParamData. Gdy wszystkie wartości kolumna będą dostępne, SQLParamData ponownie zwróci ParameterValuePtr wartość dla parametru wartości w tabela, a aplikacja rozpocznie się ponownie.

See Also

Concepts