Wykonanie przygotowanego
Interfejsu API ODBC definiuje wykonanie przygotowanego w celu zmniejszenia analizę i kompilowanie obciążenie związane z wielokrotnego wykonania Transact-SQL instrukcja.Tworzy aplikację zawierającą ciąg znaków instrukcja języka SQL , a następnie wykonuje w dwóch etapach.Wywołuje SQLPrepare raz, aby mieć instrukcja, analizować i skompilowany na plan wykonania przez Aparat baz danych.Następnie wywołuje SQLExecute dla każdego wykonanie planu wykonania przygotowany.Oszczędza to analizę i kompilowanie obciążenie przy każdym wykonaniu.Wykonanie przygotowany jest powszechnie używany przez aplikacje wielokrotnie wykonać to samo sparametryzowana instrukcja języka SQL.
Dla większości baz danych wykonanie przygotowany jest szybsze niż bezpośrednie wykonanie instrukcje wykonywane więcej niż trzy lub cztery czass głównie, ponieważ instrukcja jest kompilowana tylko raz podczas instrukcje wykonywane bezpośrednio są kompilowane każdego czas są wykonywane.Wykonanie przygotowanego oferuje również zmniejszenie ruchu w sieci, ponieważ sterownik można wysyłać identyfikator wykonanie planu i wartości parametrów, a nie całą instrukcję SQL do danych źródłowych każdego czas wykonaniu instrukcji.
SQL Server 2000i później zmniejsza wydajność różnica wykonanie bezpośrednie i przygotowany przez ulepszone algorytmy wykrywania i ponowne używanie wykonanie planów z SQLExecDirect.Udostępnia niektórych zalet wydajności wykonanie przygotowanego do instrukcje wykonywane bezpośrednio.Aby uzyskać więcej informacji, zobacz Bezpośrednie wykonanie.
SQL Server 2000 i później również zapewnia macierzystą obsługę wykonanie przygotowany.Plan wykonania jest zbudowana na SQLPrepare i wykonane później, kiedy SQLExecute jest wywoływana.Ponieważ program SQL Server 2000 i nowsze nie jest wymagane do tworzenia tymczasowych procedur przechowywanych SQLPrepare, bez dodatkowych narzuty na jest tabele systemowe w tempdb.
Ze względu na wydajność, do przygotowania instrukcja jest odroczone do czasu SQLExecute jest nazywany lub operacji metaproperty (takich jak SQLDescribeCol lub SQLDescribeParam w ODBC) jest wykonywane.Jest to zachowanie domyślne.Wszelkie błędy w instrukcja przygotowywany nie są znane, dopóki wykonaniu instrukcja lub operacji metaproperty.Ustawienie SQL Server atrybut instrukcja specyficznych dla sterownika ODBC macierzystym klienta SQL_SOPT_SS_DEFER_PREPARE do SQL_DP_OFF można wyłączyć to zachowanie domyślne.
przypadek braku odroczone przygotować, albo wywołanie SQLDescribeCol lub SQLDescribeParam przed wywoływaniem SQLExecute generuje dodatkowe roundtrip do serwera.Na SQLDescribeCol, sterownik powoduje usunięcie klauzula WHERE kwerendy i wysyła go do serwera z zestawu na FMTONLY, aby uzyskać opis kolumn w pierwszym zestaw wyników zwracanych przez kwerendę.Na SQLDescribeParam, sterownik wywołuje serwer, aby uzyskać opis wyrażeń lub kolumn, które odwołują się żadnych znaczników parametru w kwerendzie.Metoda ta ma również pewne ograniczenia, takie jak nie byliby w stanie rozwiązać parametrów w podkwerend.
Nadmiarowe, korzystanie z SQLPrepare z SQL Server sterownik ODBC macierzystym klienta obniża wydajność, zwłaszcza, gdy połączony z wcześniejszych wersji programu SQL Server.Wykonanie przygotowanego nie powinny być używane dla instrukcje wykonywane pojedynczego czas.Wykonanie przygotowany jest wolniejsze niż bezpośrednie wykonanie wykonywania pojedynczej instrukcja, ponieważ wymaga roundtrip dodatkowe sieci od klient do serwera.W starszych wersjach SQL Server również generuje procedura składowana tymczasowo.
Przygotowanych instrukcji nie można używać do tworzenia tymczasowych obiektów na SQL Server 2000 lub nowszym, lub w starszych wersjach programu SQL Server, jeśli opcja generowania procedur przechowywanych jest aktywny.Ta opcja jest włączona, gotowa instrukcja jest wbudowana w procedura składowana tymczasowo jest wykonywany, kiedy SQLExecute jest wywoływana.Każdy obiekt tymczasowy utworzony podczas wykonywania procedura składowana jest automatycznie usuwane po zakończeniu procedury.Albo następujące wyniki przykłady w tabela tymczasowa #sometable nie zostanie utworzony, jeśli opcję, aby wygenerować procedur przechowywanych dla przygotowania jest aktywny:
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 wczesne aplikacje ODBC używane w SQLPrepare wszelkie czas SQLBindParameter została użyta.SQLBindParameter nie wymagają stosowania SQLPrepare, mogą być używane z SQLExecDirect.Na przykład użyć SQLExecDirect z SQLBindParameter pobrać zwrotu parametry kod lub dane wyjściowe z procedura składowana, która jest tylko wykonywane jedną czas.Nie należy używać SQLPrepare z SQLBindParameter o ile taka sama instrukcja będzie wykonywane wielokrotnie.