29 kwietnia 2011

Tabele tymczasowe i "Cannot resolve the collation conflict between Collaction1 and Collation2 in the equal to operation."

Tabele tymczasowe i collation


Tabele tymczasowe są tworzone w bazie danych tempdb. Kolumny tych tabel domyślnie używają collation tempdb (czyli collation instacji MS SQL Server). Może to doprowadzić do problemów jeżeli baza danych używa innego collation, niż collation serwera.

28 kwietnia 2011

Replikacja transakcyjna - Architektura (Część I)

Replikacja transakcyjna


Replikacja Transakcyjna (Transactional Replication) jest jednym z kilku rodzajów replikacji dostępnych w MS SQL Server. Replikacja jest wykorzystywana do przesyłania danych pomiędzy bazami danych, które mogą znajdować się na różnych serwerach, aczkolwiek nic nie przeszkadza scenariuszowi gdzie bazy danych (źródłowa i docelowa) znajdowałyby się na tym samym serwerze. Bazę danych, która jest źródłem danych replikowanych będę nazywał bazą publikacyjną (publication database), natomiast bazę danych do której dane są replikowane będę nazywał subskrypcyjną bazą danych (subscription database). Mechanizm replikacji transakcyjnej działa w pewnym sensie bardzo granularnie. Każda zatwierdzona  transakcja  (committed transaction) jest oddzielnie zapisywana w bazie dystrybucyjnej (distribution database) i propagowana do subskrybentów przez  agenta dystrybucji. W skład replikacji transakcyjnej wchodzi kilka komponentów. Zrozumienie roli poszczególnych z nich jest kluczowe dla zrozumienia całej architektury.


27 kwietnia 2011

Sortowanie bąbelkowe w T-SQL

Rozmowa o pracę


Jeden z moich znajomych powiedział mi, że został poproszony podczas rozmowy o pracę o napisanie w języku T-SQL sortowania bąbelkowego. Znajomy spasował, a mnie zainspirowało to do napisania swojej wersji odpowiedzi. Jest to ćwiczenie czysto programistyczne i w praktyce nie ma większego sensu, gdyż istnieje magiczne słowo kluczowe w języku SQL jak ORDER BY. Sortowanie bąbelkowe jest na tyle wyeksploatowanym tematem, że aż miło było napisać to w T-SQL'u.

18 kwietnia 2011

Implementacja DML Triggerów w CLR .NET

1) Integracja CLR i SQL Server


Od wersji SQL Server 2005 Microsoft umożliwił wykonywanie kodu zarządzanego (managed code) w kontekście procesu SQL Servera. Tym samym SQL Server stał się hostem CLR (Common Language Runtime). Ten krok miał ułatwić programistom tworzenie skomplikowanej logiki wykonywanej po stronie serwerowej. W poprzednich wersjach SQL Servera należało zaimplementować rozszerzoną procedurę składowaną (extended stored procedure, XP),  jednak model programowania w porównaniu z .NET Framework był "trochę" siermiężny (COM, wycieki pamięci, destabilizacja procesu SQL Server'a etc).

CLR umożliwia implementację procedur składowanych, funkcji, triggerów, typów użytkownika oraz operatorów agregacyjnych. W tym poście skupimy się na CLR DML (Data Manipulation Language) triggerach.

15 kwietnia 2011

Prognoza pogody na dziś - Weather.com .NET klient

Pogoda nie tylko dla bogaczy


Opublikowałem klienta .NET do serwisu weather.com web. Jest napisany w C# i docelowo może być uruchamiany na .NET Framework 2.0 i późniejszych wersjach frameworka. Projekt Weather.com C# .NET client jest dostępny na codeplex.com. Kod źródłowy posiada zestaw Unit Testów, które pokazują przykłady użycia API biblioteki.

Jak zacząć korzystać z API darmowego serwisu pogodowego weather.com ?


Należy się zarejestrować na Weather.com, aby otrzymać Partner Id i License Key wymagane przy interakcji z web serwisem Weather.com . Po zakończeniu rejestracji wszystkie informacje zostaną wysłane emailem na wskazany adres. W powyższym emailu oprócz danych wymaganych przy uwierzytelnieniu, znajduje się link do SDK. Warto przejrzeć dokumentacje aby zrozumieć jak przebiega interakcja z web serwisem Weather.com. SDK zawiera też ikony potrzene do wizualizacji danych pogodowych.

08 kwietnia 2011

Triggery DML w MS SQL Server

1. Triggery DML


DML triggery (Data Manipulation Language - czyli INSERT/UPDATE/DELETE w kontekście języka SQL ) są to obiekty bazodanowe w MS SQL Server, których implementacja jest wykonywana w związku z wystąpieniem któregoś z poniższych trzech poleceń:
  • INSERT - wstawionie danych
  • DELETE - usunięcie danych
  • UPDATE - aktualizacja danych
i bardziej egzotycznych ich kombinacji
  • INSERT/SELECT
  • INSERT/EXEC
  • MERGE (dostępne od versji SQL Server 2008 i późniejszych)
    Niezeleżnie od ilości modyfikowanych wierszy przez poszczególne polecenia, SQL trigger do obsługi danego zdarzenia będzie wywołany tylko raz. (np. jedno polecenie DELETE usuwa 90 wierszy w tabeli Customers, ale AFTER DELETE trigger na tabeli Customers będzie wywołany tylko raz).  Nawet jeżeli żaden wiersz w tabeli nie będzie zmodifikowany trigger obsługujący dane zdarzenie zostanie wywołany.