Udostępnij za pośrednictwem


Wywołanie procedura przechowywana

The SQL Server Native klient ODBC driver supports both the ODBC CALL escape sequence and the Transact-SQL wykonać instrukcja for executing stored procedures; the ODBC CALL escape sequence is the preferred metoda. Przy użyciu składni ODBC włącza aplikację w celu pobrania kody powrotne procedur przechowywanych i SQL Server Macierzysty sterownik ODBC klient również jest zoptymalizowany do używania protokół, pierwotnie opracowane dla wysyłania wywołań zdalnego wywoływania (procedur RPC) między komputerami z systemem SQL Server. Ten protokół RPC zwiększa wydajność dzięki wyeliminowaniu wiele parametrów przetwarzania i analizowania składni instrukcja na serwerze.

Uwaga

Podczas wywoływania SQL Server procedury przechowywane przy użyciu parametrów nazwanych z ODBC, nazwy parametrów musi zaczynać się od znaku '@'. Jest to SQL Server określone ograniczenie. The SQL Server Native klient ODBC driver enforces this restriction more strictly than the Microsoft Data Access Components (MDAC).

Sekwencji unikowej ODBC CALL do wywoływania procedury jest:

{[?=]callprocedure_name[([parameter][,[parameter]]...)]}

gdzie procedure_name Określa, nazwy procedury oraz Parametr określa parametr procedury.

Procedura może mieć zero lub więcej parametrów.Mogą również zwracać wartość (wskazywany przez znacznik opcjonalnego parametru? = na początku składnię).Jeśli parametr jest dane wejściowe lub jako parametr wejścia/wyjścia, może to być literał lub znacznik parametru.Jeśli parametr jest parametru wyjściowego, musi być znacznik parametru, ponieważ wynik jest nieznany.Parametru musi być powiązana z SQLBindParameter , przed wykonaniem instrukcja wywołania procedury.

Parametry wejściowe i wejścia/wyjścia można pominąć z wywołania procedury.Jeśli procedura zostanie wywołana w nawiasach, ale bez żadnych parametrów, sterownik informuje urządzenie źródłowe danych, aby użyć wartości domyślnej dla pierwszego parametru.Na przykład:

{Wywołanie procedure_name**( )**}

Jeśli procedura nie ma żadnych parametrów, procedura może nie być możliwe.Procedura zostanie wywołana bez nawiasów, sterownik nie wysyła żadnych wartości parametru.Na przykład:

{Wywołanie procedure_name }

Literały mogą być określone dla parametrów wejściowych i wejścia/wyjścia w wywołań procedur.Na przykład procedura InsertOrder ma pięć parametrów wejściowych.Poniższe wywołanie InsertOrder pomija pierwszego parametru, zawiera literał jako drugi parametr i używa znacznik parametru dla trzeciego, czwartego i piątego parametrów.(Parametry są numerowane kolejno, począwszy od wartości 1.)

{call InsertOrder(, 10, ?, ?, ?)}

Należy zauważyć, że jeśli parametr zostanie pominięty, przecinek, ograniczająca go od innych parametrów muszą nadal pojawiają się.W przypadku pominięcia jako parametr wejściowy lub wejścia/wyjścia z procedury używa domyślnej wartości parametru.Inne sposoby Określ domyślną wartość parametru wejściowego lub wejścia/wyjścia są należy ustawić wartość buforu długość/wskaźnik związany z parametrem SQL_DEFAULT_PARAM lub słowo kluczowe DEFAULT.

W przypadku pominięcia jako parametr wejścia/wyjścia, lub Jeśli literał jest dostarczony dla parametru, sterownik odrzuca wartości wyjściowych.Podobnie jeżeli znacznik parametru dla wartości zwracanej przez procedurę zostanie pominięty, sterownik odrzuca zwracanej wartości.Na koniec Jeśli aplikacja określa parametr wartość zwracana dla procedury, która nie zwraca wartości, sterownik ustawia wartość związany z parametrem SQL_NULL_DATA buforu długość/wskaźnika.

Ograniczniki w instrukcji CALL

The SQL Server Native klient ODBC driver by default also supports a compatibility option specific to the ODBC { CALL } escape sequence. Sterownik akceptuje instrukcji CALL tylko pojedynczy zestaw podwójny cudzysłów ograniczająca nazwy całą procedura przechowywana:

{ CALL "master.dbo.sp_who" }

Domyślnie SQL Server Macierzysty sterownik ODBC klient może również stanowić instrukcji CALL, postępuj zgodnie z regułami ISO i ująć w podwójny cudzysłów każdy identyfikator:

{ CALL "master"."dbo"."sp_who" }

Po uruchomieniu z ustawieniami domyślnymi, jednak SQL Server Macierzysty sterownik ODBC klient nie obsługuje z identyfikatorów, które zawierają znaki nie został określony jako prawnej w identyfikatorach przez normy ISO przy użyciu obu formularzy cytowany identyfikator. Na przykład sterownik nie może uzyskać dostępu procedura przechowywana o nazwie "My.Proc" za pomocą instrukcja CALL z identyfikatorów w cudzysłowach:

{ CALL "MyDB"."MyOwner"."My.Proc" }

Ta instrukcja jest interpretowany przez sterownik jako:

{ CALL MyDB.MyOwner.My.Proc }

Serwer wywołuje błąd o nazwie serwer połączony MyDB nie istnieje.

Problem nie istnieje, korzystając z identyfikatorów bracketed, tej instrukcja jest poprawnie interpretowany:

{ CALL [MyDB].[MyOwner].[My.Table] }