Monthly Archives: Wrzesień 2012

Drobna (stara) zmiana w komunikacie błędu, o której właśnie się dowiedziałem :)

Wakacje się już skończyły, tak więc i ja powoli wracam do blogowania. Dzisiejszym wpisem chciałbym pokazać dość drobną zmianę, którą właśnie odkryłem testując SQL Server 2012. Co więcej zmiana ta została  wprowadzona we wcześniejszych wersjach SQL Server-a, a ja najzwyczajniej ją przeoczyłem 🙂

Na początek przygotowanie sytuacji problemowej

Wyobraźmy sobie sytuację w której mamy zdefiniowaną tabelę do której importujemy dane z zewnętrznego źródła. Przykładowa struktura takiej tabeli mogłaby wyglądać następująco:

CREATE TABLE #t (
  id int PRIMARY KEY,
  KolumnaA varchar(100)
)

Wypełnijmy ją kilkoma przykładowymi rekordami:

INSERT INTO #t(id, KolumnaA)
SELECT 1, 'aaa'
UNION ALL
SELECT 2, 'bbb'
UNION ALL
SELECT 3, 'ccc'

A teraz zasymulujmy problem

Do tego celu posłużymy się instrukcją INSERT podobną do tej, która wypełnialiśmy przykładową tabelę:

INSERT INTO #t(id, KolumnaA)
SELECT 11, '111111'
UNION ALL
SELECT 2, '22222'
UNION ALL
SELECT 33, '33333'

Druga wartość wstawiana do tabeli spowoduje wygenerowanie błędu (duplikat w kluczu głównym tabeli). Do tej pory wszelkiego rodzaju importy robiłem na SQL Server 2005 i komunikat błędu wyglądał tak:

Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint ‚PK__#t________________4D8FEC29’. Cannot insert duplicate key in object ‚dbo.#t’.
The statement has been terminated.

Podczas testów SQL Server 2012 zaskoczyła mnie nieco zmieniona treść komunikatu:

Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint ‚PK__#t________3213E83F4AD2AC5D’. Cannot insert duplicate key in object ‚dbo.#t’. The duplicate key value is (2).
The statement has been terminated.

Jakby nie patrzeć jest o wiele przyjemniej. Od razu widać jaka wartość powoduje problem z wpisaniem wartości do tabeli.

Czy to jest zmiana wprowadzona w SQL Server 2012 ??

Pracując z różnymi wersjami SQL Server-ów człowiek zaczyna się zastanawiać, czy to co właśnie odkrył jest faktycznie nowością, czy może jest to nowość tylko i wyłącznie dla niego. W badanym przypadku okazało się, że jest to nowość, która istniała na 100% w SQL Server 2008R2. Niestety nie miałem możliwości sprawdzenia czy SQL 2008 też obsługuje badany błąd w ten sam sposób, tak więc jeżeli ktoś z was ma tę wersję pod ręką – chętnie się dowiem 🙂

Podsumowanie

Platforma SQL Server jest  na tyle spora, że nawet kilka lat po wprowadzeniu danej wersji można odkryć w niej coś nowego. W moim przypadku testując najnowszą wersję  odkryłem coś, co zostało wprowadzone kilka lat temu 🙂

Reklamy

Czas do szkoły : SQL Server 2008 Internals and Query Tuning

Wrzesień już się zaczął, ta więc czas brać się do nauki. Tym z was, którzy są zainteresowani rozwijaniem swoich umiejętności mogę polecić szkolenie:

SQL Server 2008 Internals and Query Tuning

Dlaczego warto ??

Po pierwsze – z uwagi na osobę prowadzącą, którą jest Maciej Pilecki. Jeżeli nie mieliście okazji poznać Maćka, to mogę powiedzieć, że jest on prawdziwym ekspertem z dziedziny SQL Server i jedynym Polakiem posiadającym tytuł Microsoft Certified Master z tego zakresu. Jego ulubionymi tematami są SQLOS, Storage Engine oraz Query Optimizer. Jeżeli nurtuje was jakieś pytanie z nimi związane, to Maciej na 100% będzie znał odpowiedź.

Po drugie – z uwagi na ciekawy program, z którym można się zapoznać po tym linkiem:

http://www.biztech.pl/Zalaczniki/Szkolenie_SQL_Server2008n.pdf

Gdzie się zapisać ??

Najlepiej skorzystać ze strony organizatora:

http://www.biztech.pl/Default.aspx?PageId=1251