Pokazywanie postów oznaczonych etykietą SQL Server 2012. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą SQL Server 2012. Pokaż wszystkie posty

środa, 16 kwietnia 2014

Stronicowanie (pagination) w SQL Server - ROW_NUMBER() vs RANK() vs DENSE_RANK()

Zastanawialiście się kiedyś jak robić stronicowanie w SQL Server? Ja ostatnio musiałem coś takiego zrobić, ale nie używając żadnego ORM'a lecz jedynie gołe ADO.NET. Sprawa wydawała się być banalna, napisałem zapytanie ale okazało się, że wyniki są jakieś dziwne i jeszcze się powielają mimo tego iż miałem DISTINCTA na zapytaniu. Poszperałem trochę w necie i doczytałem, że powinienem zamiast funkcji ROW_NUMBER() używać DENSE_RANK(). Okazuje się, że ROW_NUMBER() nadaje każdemu wierszowi kolejny, unikalny number. DENSE_RANK() nadaje unikalny numer ale jedynie wierszom, które się nie duplikują.

Na tej stronie możecie znaleźć fajnie to wszystko wyjaśnione. Również różnicę między DENSE_RANK() a RANK(). 
W skrócie:

  • ROW_NUMBER - nadaje każdemu wierszowi unikalny numer, nie zważając na duplikaty
  • RANK() - nadaje unikalnym wierszom rangę (unikalny numer) z przerwami w rankingu
  • DENSE_RANK() - nadaje unikalnym wierszom rangę (unikalny number) bez przerw w rankingu.  

Z tej powyższej strony wzięta jest również poniższa tabelka, która na szybko przedstawia różnicę między ROW_NUMBER(), RANK() oraz DENSE_RANK()
+---+------------+------+------------+
| V | ROW_NUMBER | RANK | DENSE_RANK |
+---+------------+------+------------+
| a |          1 |    1 |          1 |
| a |          2 |    1 |          1 |
| a |          3 |    1 |          1 |
| b |          4 |    4 |          2 |
| c |          5 |    5 |          3 |
| c |          6 |    5 |          3 |
| d |          7 |    7 |          4 |
| e |          8 |    8 |          5 |
+---+------------+------+------------+

piątek, 11 kwietnia 2014

Database schema modeling - SQL Server Data Tools!

Post ku pamięci. Czy zdarzyło wam się kiedykolwiek, że mieliście 2 bazy danych, w których musieliście porównać ich schemę? Ja ostatnio miałem taką zagwozdkę, robiłem nową funkcjonalność i przepadł mi gdzieś skrypt, który uaktualniałby schemę bazy danych. Wiedziałem, że są pewne narzędzia, które by mi pomogły jednak nie chciałem korzystać z narzędzi firm trzecich. Poszperałem trochę w necie i okazało się, że Microsoft zrobił takie narzędzie. Nazywa się SQL Server Data Tools. Dzięki temu narzędzi możemy porównać sobie schemę dwóch baz, a nawet wygenerować skrypt zmian, który uaktualni nam naszą bazę danych.



SQL Server Data Tools jest dostarczane razem z Visual Studio 2013, jest możliwość dociągniecia instalki również do Visual Studio 2010 i Visual Studio 2012. Konkretną wersję można ściągnąć tutaj
http://blogs.technet.com/b/dataplatforminsider/archive/2013/11/13/microsoft-sql-server-data-tools-update.aspx

Co oferuje nam jeszcze to narzędzie? Możemy oczywiście graficznie modelować sobie naszą bazę danych. Mało tego narzędzie umożliwia nam nawet porównać dane w obu bazach za pomocą opcji "Data comparision" oraz tworzyć unit testy naszej bazy: więcej informacji znajdziemy tutaj

piątek, 7 lutego 2014

Kopiowanie zawartości jednej tabeli do drugiej

Załóżmy, że mamy dwie identyczne tabele, Table1, Table2. Table1 trzyma aktualne dane, Table2 dane historyczne. Ich struktura jest identyczna. Czasami zdarza się, że musimy przekopiować pewną ilość danych z jednej tabeli do drugiej. 
Można to zrobić następujących skryptem:

INSERT INTO Table1
SELECT * FROM Table2
WHERE some_condition

Bardzo prosty skrypcik. A piszę o nim ponieważ miałem z nim chwilę problem gdy napisałem go w takiej postaci (Z NAWIASAMI):
INSERT INTO Table1
(SELECT * FROM Table2
WHERE some_condition)

wtedy zapytanie wywala błąd. Prawdopodobnie dlatego, że oczekuje w nawiasach dokładnych parametrów a nie podzapytania.
Na szczęście szybko udało się rozwiązać problem. 

Wybieranie nazw kolumn w tabeli

Czasami zdarza się, że nasza tabela zawiera sporą ilość kolumn a my musimy wylistować wszystkie kolumny. Wiadomo, programista to leń i zawsze chce sobie ułatwić pracę. Dlatego poniższy skrypt już nie raz był przeze mnie używany. Wybiera on wszystkie kolumny z danej tabeli:

SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME'

czwartek, 23 stycznia 2014

Instalacja SQL Server 2012 Management Studio Express

Ściągasz sobie SQL Server 2012 i instalujesz. Wchodzisz w menu start -> SQL Server 2012, chcesz odpalić management studio i zonk! Nie ma! No nie ma! Chyba z godzinę szukałem gdzie i jak to zainstalować. Ściągnąłem od początku SQL Server 2012 Express i nadal dupa. Okazuje się, że trzeba ściągnąć odpowiedni pakiet, o stąd:
http://www.microsoft.com/en-us/sqlserver/editions/2012-editions/express.aspx