Archiwum dla kategorii ‘SQL’

Audyt w oparciu o trigger

2013-09-19

Budując audyt możesz skusić się na śledzenie modyfikacji rekordów w taki sposób aby zapamiętać zmianę każdego rekordu, jego wstawienie lub usunięcie tak, aby wiadomo było kto i kiedy był autorem jakiej poprawki. Łatwo to osiągnąć stosując triggery, ale pamiętaj, że nie jest to w 100% poprawny audyt, bo triggery administrator może wyłączyć, albo może skasować […]

By Rafał Kraik in SQL

TOP od tyłu (z końcowymi rekordami)

2013-09-12

Trzeba uporządkować rekordy wg pewnej kolumny, w naszym przykładzie dajmy na to wg orderid. Spośród tych rekordów chcemy wybrać tylko 5 ostatnich. Ha nic w tym trudnego, wystarczy takie zapytanie: SELECT TOP(5) orderid FROM Sales.Orders ORDER BY ordered DESC …tylko, że użytkownik chce zobaczyć te rekordy ułożone w kolejności rosnącej. Jeśli w zapytaniu zmienisz DESC […]

By Rafał Kraik in SQL

Niespójność w PARSE i ISNUMERIC

2013-09-12

Wydawać by się mogło, że jeśli funkcja ISNUMERC stwierdziła, że przekazany w argumencie tekst jest poprawnym wyrażeniem numerycznym, to funkcja PARSE powinna umieć ten napis poprawnie skonwertować na liczbę. Tymczasem: SELECT ISNUMERIC(‘1E3’) zwraca true SELECT PARSE(‘1E3 As FLOAT) zwraca 1000, czyli póki co wszystko działa. Ale: SELECT ISNUMERIC(‘1+E3’) zwraca true SELECT PARSE(‘1+E3 As FLOAT) zwraca […]

By Rafał Kraik in SQL

Jak usunąć ze zmiennej DATETIME część dotyczącą sekund i pozostałe, zostawiając datę i czas z dokładnością do minuty

2013-08-21

Problem jest następujący. Mamy czas z taką dokładnością jak np DATETIME lub DATETIME2. Chcemy pozbyć się części od sekund w dół, czyli mają pozostać tylko data, godzina i minuta. Z pomocą przychodzi tym SMALLDATETIME. Działa on z dokładnością do sekund, ale… kiedy konwertujesz do niego, to funkcja CAST przeprowadza konwersję z dokładnością do minut! Czemu […]

By Rafał Kraik in SQL

Generowanie tabeli interwałów czasowych

2013-08-21

Problem jest następujący. Potrzebna jest tabela wypełniona godzinami (lub datami), w oparciu o którą dalej będzie można budować wyrażenie JOIN dobierające dane z innej tabeli tak aby agregować wszystkie zdarzenia z danej godziny razem. Oto moja propozycja: CREATE PROCEDURE dbo.GetIntervals @dateTimeStart DATETIME, @countMax INT AS BEGIN CREATE TABLE #time ( StartInterval SMALLDATETIME, StopInterval SMALLDATETIME)

By Rafał Kraik in SQL

Czy wielkość liter w nazwie tabeli ma znaczenie?

2013-08-21

I tak i nie. Każda baza danych ma tzw. collation. Collation określa między innymi stronę kodową, która ma wpływ na porównywanie ze sobą napisów, w tym porównywanie wielkości znaków. Jeżeli więc Collation jest zdefiniowane, jako CASE SENSITIVE (czułe na wielkość liter), to pisząc zapytanie musisz odwoływać się do obiektów pisząc nazwy tych obiektów wielką lub […]

By Rafał Kraik in SQL

Wyłączone constrains

2013-07-09

Wszyscy chcemy żeby nasze bazy danych działały idealnie i aby nic ich nie spowalniało. Jeśli mowa byłaby o samochodzie, to teraz opowiedziałbym o sprawdzaniu oleju, ciśnienia w kołach  itp. Mowa jedanak o bazie danych. Oto co możesz zrobić, aby twojej bazie było lżej. Jak pisałem w tym artykule możesz chwilowo (np. przed wykonaniem importu) wyłączyć […]

By Rafał Kraik in SQL