Próba wyświetlenia szacunkowego planu wykonania (
estimated execution plan) dla poniższego kodu T-SQL:
CREATE TABLE tab01
(
uniqie_id int
)
INSERT INTO tab01 SELECT 1;
kończy się błędem:
Msg 208, Level 16, State 1, Line 6
Invalid object name 'tab01'.
Pytanie: dlaczego?
Odpowiedź: procesor kwerend, w przypadku generowanie szacunkowego planu wykonania (opcje
SET SHOWPLAN_ALL ON,
SET SHOWPLAN_TEXT ON lub
SET SHOWPLAN_XML ON), nie wykonuje kodu T-SQL (to tak jakbyśmy włączyli opcję
SET NOEXEC ON). Procesowanie zapytań w tym trybie rozpoczyna się etapem parsowania, następnie - algebryzacji, a kończy się na etapie optymalizacji. Zadaniem algebrizera jest m.in. bindowanie nazw do obiektów i to właśnie jemu podczas algebryzacji zapytania INSERT nie podoba się, że tabela
tab01 nie istnieje. W przypadku standardowego wykonywania powyższego kodu T-SQL błędu oczywiście nie ma. Co ciekawe, algebrizer "widzi" definicję obiektu
tab01, mimo że w momencie generowania rzeczywistego planu wykonania dla zapytania INSERT tabela ta również może nie istnieć jako fizyczny obiekt. Funkcjonuje już jednak w logice procesora kwerend i można do niej bindować.