Trwa przygotowywanie polecenia
The SQL Server Native klient OLE DB dostawca supports command preparation for optimized multiple execution of a single command; however, command preparation generates overhead, and a consumer does not need to prepare a command to wykonać it more than once. Ogólnie rzecz biorąc polecenie powinna być przygotowana, jeśli ma być ono wykonane więcej niż trzy razy.
Ze względu na wydajność przygotowania polecenia jest przesunięty do momentu polecenie jest wykonywane.Jest to zachowanie domyślne.Błędy w trakcie przygotowywania poleceniu nie są znane, aż do chwili, kiedy polecenie jest wykonywane lub wykonywana jest operacja metaproperty.Ustawianie SQL Server Właściwość SSPROP_DEFERPREPARE FAŁSZ może wyłączyć to zachowanie domyślne.
W SQL Server, gdy polecenie jest wykonywane bezpośrednio (bez przygotowania go najpierw), plan wykonania jest tworzony i w pamięci podręcznej. Jeżeli instrukcja języka SQL jest wykonywana ponownie, SQL Server ma efektywny algorytm do nowego sprawozdania z istniejących planów wykonywania w pamięci podręcznej, a następnie ponownie używa planu wykonania dla tej instrukcji.
Dla przygotowanych poleceń SQL Server zapewnia obsługę macierzystego przygotowania i wykonywanie instrukcji polecenia. Podczas przygotowywania instrukcja, SQL Server tworzy plan wykonania, umieszcza go w pamięci podręcznej, a następnie zwraca dojścia do tego planu wykonania do dostawca. Dostawca używa tego dojścia do wielokrotnego wykonywania instrukcja.Nie procedury przechowywane są tworzone.Ponieważ dojście bezpośrednio identyfikuje plan wykonania dla instrukcja języka SQL, zamiast dopasowania deklarację do planu wykonania w pamięci podręcznej (jak przypadek wykonywania bezpośrednie), jest bardziej efektywne do przygotowania instrukcja niż aby ją wykonać bezpośrednio, jeśli znasz instrukcja zostanie wykonany więcej niż jeden raz.
W SQL Server 2005, SQL Server 2000, a SQL Server 7.0, przygotowanych instrukcji nie można używać do tworzenia obiektów tymczasowy i nie mogą odwoływać się do tworzenia tymczasowych obiektów, takich jak tabele tymczasowe procedury składowane w systemie. Procedury te muszą być wykonane bezpośrednio.
Niektóre polecenia nigdy nie powinna być przygotowana.Na przykład poleceń, które określają wykonywanie procedura przechowywana lub zawiera nieprawidłowy tekst SQL Server Tworzenie procedura przechowywana nie powinna być przygotowana.
Jeśli procedura przechowywana tymczasowo jest tworzony, SQL Server Wykonuje macierzystego dostawca klient OLE DB procedura przechowywana tymczasowo, zwracania wyniki tak, jakby został wykonany samą deklarację.
procedura przechowywana tymczasowo tworzenia jest kontrolowana przez SQL Server Macierzysta klient OLE DB - inicjowanie określonych właściwość SSPROP_INIT_USEPROCFORPREP. Jeśli wartość właściwość jest SSPROPVAL_USEPROCFORPREP_ON lub SSPROPVAL_USEPROCFORPREP_ON_DROP, SQL Server Macierzystego dostawca klient OLE DB próbuje utworzyć procedura przechowywana, gdy polecenie jest gotowa. Tworzenie procedura przechowywana zakończy się pomyślnie, jeśli aplikacja ma wystarczające SQL Server uprawnienia.
Dla klientów, że rzadko rozłączone tworzenie tymczasowych procedur przechowywanych może wymagać znaczących zasobów tempdb, the SQL Server w którym tworzony jest obiekt tymczasowej bazy danych systemu. SSPROP_INIT_USEPROCFORPREP wartość ON SSPROPVAL_USEPROCFORPREP_, tymczasowo przechowywane procedury utworzone przez SQL Server Macierzystego dostawca klient OLE DB są usuwane, tylko wtedy, gdy sesja utworzone z polecenia utraci połączenie z wystąpienie SQL Server. Jeśli połączenie to jest domyślne połączenie utworzone na zainicjowanie urządzenie źródłowe danych, procedura przechowywana tymczasowo zostanie usunięte tylko wtedy, gdy urządzenie źródłowe danych staje się niezainicjowana.
Gdy ma wartość SSPROP_INIT_USEPROCFORPREP SSPROPVAL_USEPROCFORPREP_ON_DROP, SQL Server Macierzysta klient OLE DB dostawca tymczasowe procedury przechowywane są usuwane, gdy następuje jedno z następujących czynności:
Używa konsumenta ICommandText::SetCommandText , aby wskazać nowe polecenie.
Używa konsumenta ICommandPrepare::Unprepare oznacza, że nie jest już wymaga tekstu polecenia.
Konsument zwalnia wszystkie odwołania do obiektu polecenia używając procedura przechowywana tymczasowo.
Obiektu polecenia znajduje się co najwyżej jedno procedura przechowywana tymczasowo w tempdb.Istniejącą tymczasową procedura przechowywana reprezentuje bieżący tekst polecenia obiektu określonego polecenia.