Udostępnij za pośrednictwem


Wykonanie przygotowanego

Interfejsu API ODBC definiuje wykonanie przygotowanego w celu zmniejszenia analizę i kompilowanie obciążenie związane z wielokrotnego wykonywania Transact-SQL Instrukcja. Aplikacja tworzy zawierające ciąg znaków instrukcja języka SQL, a następnie wykonuje w dwóch etapach.Wywołuje SQLPrepare raz do instrukcja w sytuacji, a skompilowany do planu wykonania przez Database Engine. Następnie wywołuje SQLExecute dla każdego wykonania plan wykonania przygotowany.Spowoduje to zapisanie analizę i kompilowanie obciążenie przy każdym wykonaniu.Wykonanie przygotowanego jest często używane przez aplikacje do wielokrotnie wykonać instrukcję SQL w tej samej, parametrami.

W przypadku większości baz danych wykonanie przygotowanego jest szybsze niż bezpośrednie wykonanie instrukcje wykonywane w więcej niż trzy lub cztery czas s, głównie dlatego, że w instrukcja jest kompilowany tylko raz, podczas gdy znajdują się instrukcje wykonywane bezpośrednio skompilowany każdego czas ich wykonywania.Wykonanie przygotowanego oferuje również zmniejszenia ruchu w sieci, ponieważ sterownik może wysyłać identyfikator planu wykonania i wartości parametrów, a nie całą instrukcję SQL w źródle danych przy każdym wykonaniu instrukcja.

SQL Server 2000 i później zmniejsza wydajność różnica bezpośrednie i przygotowany wykonywanie przy użyciu ulepszonych algorytmów wykrywania i ponownego użycia planów wykonywania z SQLExecDirect.Spowoduje to udostępnienie niektórych zalet związanych z wydajnością wykonywania przygotowany do instrukcje wykonywane bezpośrednio.Aby uzyskać więcej informacji zobacz Bezpośrednie wykonanie.

SQL Server 2000 lub nowszy udostępnia również obsługę macierzystego wykonywanie przygotowany.Plan wykonania jest zbudowana na SQLPrepare i później wykonywana kiedy SQLExecute nosi nazwę.Ponieważ program SQL Server 2000 i nowszy nie jest wymagane do tworzenia tymczasowych procedur przechowywanych SQLPrepare, jest nie dodatkowe obciążenie związane z tabelami systemu tempdb.

Ze względu na wydajność do przygotowania instrukcja jest przesunięty do SQLExecute nosi nazwę lub operacji metaproperty (np. SQLDescribeCol or SQLDescribeParam ODBC) jest wykonywane.Jest to zachowanie domyślne.Błędy w trakcie przygotowywania instrukcji nie są znane, dopóki nie zostanie wykonana instrukcja lub wykonywana jest operacja metaproperty.Ustawianie SQL Server Atrybut instrukcja specyficzne dla sterownika ODBC klient macierzystym SQL_SOPT_SS_DEFER_PREPARE do SQL_DP_OFF może wyłączyć to zachowanie domyślne.

przypadek braku odroczone przygotowanie, albo wywołanie SQLDescribeCol or SQLDescribeParam przed wywołaniem SQLExecute generuje dodatkowe obie strony na serwerze.Na SQLDescribeCol, sterownik powoduje usunięcie klauzula WHERE kwerendy i wysyła do serwera z zestaw FMTONLY ON, aby uzyskać opis kolumn w pierwszym zestawie wyników zwróconych przez kwerendę.Na SQLDescribeParam, sterownik wywołuje serwer, aby uzyskać opis wyrażeń lub kolumnach, odwołanie do niego wszystkie znaczniki parametru w kwerendzie.Metoda ta zawiera także pewne ograniczenia, takie jak nie jest w stanie rozpoznać parametrów w podkwerend.

Nadmierne wykorzystanie SQLPrepare with the SQL Server Macierzysty sterownik ODBC klient obniża wydajność, zwłaszcza w przypadku, gdy połączony z wcześniejszych wersji programu SQL Server. Wykonanie przygotowanego nie powinny być używane dla instrukcje wykonywane pojedyncze czas.Wykonanie przygotowanego jest wolniejsze niż bezpośrednie wykonanie wykonywania pojedynczej instrukcja, ponieważ wymaga roundtrip dodatkowych sieci od klient do serwera.We wcześniejszych wersjach SQL Server generuje również procedura przechowywana tymczasowo.

Przygotowanych instrukcji nie można używać do tworzenia obiektów tymczasowych na SQL Server 2000 lub nowszy, albo we wcześniejszych wersjach programu SQL Server, jeśli opcję, aby wygenerować procedur przechowywanych jest aktywny. Ta opcja jest włączona, gotowa instrukcja jest wbudowana w tymczasową procedura przechowywana, która jest wykonywana, kiedy SQLExecute nosi nazwę.Każdy obiekt tymczasowy utworzony podczas wykonywania procedura przechowywana jest automatycznie usuwane po zakończeniu tej procedury.Jedną z następujących wyniki przykłady tabela tymczasowa #sometable nie zostanie utworzony, jeśli opcję, aby wygenerować procedur przechowywanych dla przygotowania jest aktywne:

SQLPrepare(hstmt,
   "CREATE TABLE #sometable(cola int, colb char(8))",
   SQL_NTS);
SQLExecute(hstmt);

lub

SQLPrepare(hstmt,
   "SELECT * FROM Authors INTO #sometable",
   SQL_NTS);
SQLExecute(hstmt);

Niektóre aplikacje wczesne ODBC używane SQLPrepare any czas SQLBindParameter został użyty.SQLBindParameter nie wymaga stosowania SQLPrepare, można użyć z SQLExecDirect.Na przykład użyć SQLExecDirect with SQLBindParameter , aby pobrać wartość zwrócony kod lub dane wyjściowe parametry procedura przechowywana, która jest tylko wykonane jeden raz.Nie należy używać SQLPrepare with SQLBindParameter , chyba że zostanie wykonana w tej samej instrukcja wiele razy.

See Also

Concepts