Zaokrąglanie

Po ostatnich poprawkach w kodzie procedur wyliczających ile kasy należy komu wypłacić odbiorca zwrócił uwagę, że w jego przypadku wychodzą inne wyniki przy zaokrąglaniu do uzgodnionej liczby miejsc po przecinku. Testowanie wyników odbywało się poprzez Accessa i procedury w VBA, co powodowało rozjazd z danymi SQL Servera. Cóż, zaokrąglenia mogą być różne, nie tylko znane wszem i wobec arytmetyczne. Źle tylko, że tak samo nazywająca się funkcja ma różne implementacje w różnych językach – trzeba sprawdzać która z nich akurat jest przyjęta. Czytaj dalej

osql i polskie znaki

W poprzednim tekście napisałem, że w przypadku SQL Servera 2000 do automatyzacji zadań możemy wykorzystać osql. Niestety może on mieć problem w przypadku gdy chcemy załadować plik zawierający polskie znaki. Na szybko można wykorzystać dwa rozwiązania:

  • zamiana strony kodowej ładowanego pliku,
  • lub uruchomienie Query Analyzera z poziomu konsoli Czytaj dalej

Uruchom plik SQL

Dłuższe skrypty SQL mam w zwyczaju pisać w zwykłym edytorze tekstowym a nie w dedykowanym narzędziu – w przypadku używanego w pracy SQL Servera 2000 jest to Query Analyzer (QA) [w późniejszych wersjach zintegrowany w SQL Server Management Studio (SSMS)]. Powodów jest kilka – choćby przyzwyczajenie do skrótów klawiszowych czy makr. Przyjąłem też zasadę, że pisząc kod procedur składowanych trzymam każdą z nich w oddzielnym pliku. Wszystko jest fajnie dopóki nie trzeba wprowadzić zmian w kilku procedurach jednocześnie i potem zsynchronizować je między środowiskiem testowym i produkcyjnym. Standardowe podejście to ręczne wczytanie i uruchomienie pliku z poziomu QA, ale przy -nastu plikach jest to męczące. Jak to zautomatyzować? Czytaj dalej

Mnożenie rekordów w SQL

Podczas prac nad jednym z modułów systemu który rozwijam pojawił się pomysł mnożenia wartości zgrupowanych danych. Niestety standardowy mechanizm SQL pozwala jedynie na kilka operacji na rekordach: sum(), avg(), count() etc. Jak to zrobić? Okazuje się, że banalnie prosto:

W = exp(sum(log(kolumna)))

Czyli z grubsza wystarczy zamienić mnożenie na sumowanie logarytmów.

Taa. Jasne. Czytaj dalej