SSIS pod lupą – Lookup NoCache – Start

W poprzednim wpisie widać było, że walidacja prostego Lookupu jest przeprowadzana kilkukrotnie – cztery razy włącznie ze sprawdzaniem z poziomu Visual Studio. A co dokładnie tam się dzieje? Po raz kolejny profiler dostarcza doskonałego materiału do nauki.

lookupnocachevalidationsequenceZawartość pierwszych pięciu kroków zarejestrowanych przez SQL Profilera poniżej. Dla czytelności oddzielam je liniami komentarza z numerem kroku.

-- krok 1
declare @p1 int
set @p1=1
exec sp_prepare @p1 output,NULL,N'SELECT Id, Login FROM dbo.Users',1
select @p1
go

-- krok 2
exec sp_unprepare 1
go

-- krok 3
exec [sys].sp_describe_undeclared_parameters N'select * from (SELECT Id, Login FROM dbo.Users) [refTable]
where [refTable].[Login] = @P1'
go

-- krok 4
declare @p1 int
set @p1=2
exec sp_prepare @p1 output,N'@P1 char(6)',N'select * from (SELECT Id, Login FROM dbo.Users) [refTable]
where [refTable].[Login] = @P1',1
select @p1
go

-- krok 5
exec sp_unprepare 2
go

Dla ułatwienia dodatkowo dwa zrzuty ekranu z konfiguracji transformacji Lookup.

Konfiguracja połączenia

Konfiguracja połączenia

Sekcja Advanced

Sekcja Advanced ze zmodyfikowanym zapytaniem z Connection

Po kolei co się dzieje w poszczególnych krokach:

  1. Krok 1: wywołanie procedury sp_prepare z poleceniem z konfiguracji w sekcji Connection
  2. Krok 2: wywołanie procedury sp_unprepare z parametrem 1
  3. Krok 3: wywołanie procedury sys.sp_describe_undeclared_parameters z poleceniem z konfiguracji w sekcji Advanced
  4. Krok 4: wywołanie procedury sp_prepare z poleceniem z konfiguracji w sekcji Advanced
  5. Krok 5: wywołanie procedury sp_unprepare z parametrem 2

Zgodnie z dokumentacją procedura sp_prepare przygotowuje parametryzowane polecenie SQL i zwraca „uchwyt” do tego zapytania. W naszym przypadku weryfikuje poprawność zapytania – jeśli wykona się bez błędu, wówczas zapytanie jest poprawne. sp_unprepare służy do pozbycia się wygenerowanego przez  sp_prepare planu zapytania.

Trzeci krok służy do opisania parametrów zapytania. Wywołanie sys.sp_describe_undeclared_parameters zwraca serię informacji o sugerowanych typach parametrów, np dla naszego fragmentu (po transpozycji danych):

parameter_ordinal 1
name @P1
suggested_system_type_id 175
suggested_system_type_name char(6)
suggested_max_length 6
suggested_precision 0
suggested_scale 0
suggested_user_type_id
suggested_user_type_database
suggested_user_type_schema
suggested_user_type_name
suggested_assembly_qualified_type_name
suggested_xml_collection_id
suggested_xml_collection_database
suggested_xml_collection_schema
suggested_xml_collection_name
suggested_is_xml_document False
suggested_is_case_sensitive False
suggested_is_fixed_length_clr_type False
suggested_is_input True
suggested_is_output False
formal_parameter_name
suggested_tds_type_id 175
suggested_tds_length 6

Zatem parametr w zapytaniu został określony jako char(6). Dzięki znajomości typu parametru można przygotować zapytanie z parametrami (zakładka Advanced) za pomocą sp_prepare i sprawdzić jego poprawność. A potem usunąć wygenerowany plan przez sp_unprepare.

Czyli wykonywane kroki to:

  • sprawdzenie poprawności polecenia z zakładki Connection
  • sprawdzenie typu parametru z polecenia z zakładki Advanced
  • sprawdzenie poprawności polecenia z zakładki Advanced

 

Reklamy

Jedna uwaga do wpisu “SSIS pod lupą – Lookup NoCache – Start

  1. Pingback: SSIS pod lupą – Lookup NoCache | Takie tam

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s