2016-07-05
Chciałem zpaisać w trace inforacje o tym ile czasu zajmuje insert do tabeli „printjob”. Developer podejrzewał, że coś jest nie tak po tronie SQL, a admin SQL czyli ja próbował się przed tym zarzutem obronić. Rzeczywiście – tabelka jak to tabelka, kilka tysięcy rekordów, struktura dość poprawna, brak triggerów, kluczy obcych itp. Zapisy powinny być szybkie.
Pierwszym krokiem było sprawdzenie ile czasu wykonuje się INSERT. Dodatkowo chciałem aby profiler nie łapał abyt wielu zdarzeń, więc dość restrykcyjnie ustawiałem filtry. W textdata chciałem np. złapać wyłączneie zdarzenia
LIKE '%insert%printjob%’
Niestety moje inserty się nie pokazywały. Baza nie ma procedur, i jakby nie partzeć, żeby dopisać rekord musiałoby się gdzieś wykonać INSERT….printjob.
Zaczynałem od:
- batch starting / completed
- statement starting / completed
- SP starting / completed
ale dopiero dodanie
- SP statement started / completed
pomogło.
W moim przypadku – SQL niewinny, a developer musi szukać dalej 😉
2016-07-01
Baza danych SAP Adaptive Server Enterprise znana wcześniej jako SAP Sybase albo Sybase ASE nie ma aż tak wielu zasobów, co MS SQL Server. A przecież administratorzy też spotykają problemy i muszą je rozwiązywać. Brakuje książek, filmów, tutoriali, a baza jest używana i to wcale nie do małych zastosowań. Istnieją na rynku produkty, które współpracują właśnie z bazą Sybase i pod tą bazę zostały skonfigurowane.
Mam przyjemność poznawać tą bazę. Postanowiłem opisać swoje doświadczenia. Informuję, że uruchamiam nowego bloga:
https://sap-database.blogspot.com/

na którym będę opisywał, czego nowego dowiedziałem się o bazie danych SAP ASE / Sybase. Pierwsze tematy dotyczą urządzeń, ale będą kolejne i kolejne. Zainteresowanych zapraszam do korzystania a może nawet do współredagowania bloga.
2016-06-23
SQL serwer pozwala na to, żeby na serwerze obowizywało inne collation niż w bazie danych. Ale jeśli utworzysz obiekt tymczasowy, apotem zechcesz wykonywać złaczenia (JOIN) z tym obiektem, to… marny twój los.
Tym razem programista zdecydował się utworzyć procedurę tymczasowa:
CREATE PROCEDURE #test @statement VARCHAR(50)
AS
…
IF @STATEMENT IN (’DISPLAY’, 'HIDE’)
BEGIN
…
Podczas tworzenia procedury pojawiał się bład:
Implicit conversion of varchar value to varchar cannot be performed because the collation of the value is unresolved due to a collation conflict.
Ale co jest złe? Parametr, cała procedura, IF?
Pomogła następujca poprawka:
IF @STATEMENT IN (’DISPLAY’ COLLATE DATABASE_DEFAULT , 'HIDE’ COLLATE DATABASE_DEFAULT)
Najwyraźniej stałe napisowe korzystały z collation specyficznego dla serwera (tempdb). Collation DATABASE_DEFAULT wyraźnie precyzuje jak porównywać napisy.
2016-06-18
Podczas otwierania łaczy w mailu pojawia się błąd:
operacja została anulowana z powodu ograniczeń nałożonych na ten komputer
Link nie otwiera się.
Istnieje klika rozwiązań w sieci, w tym automatyczne kreatory do uruchomienia na komputerze, które zrobią nie wiadomo co, przywracanie ustawień domyślnych Internet Explorer, których czort wie czy i po co w ogóle zmieniał. A jest prosta metoda opisana na kilku forach i u mnie też zadziałała:
1. Uruchom regedit.exe
2. Przejdź do H_KEY_CLASSES_ROOT, wyszukaj klucza .htm, .html, .shtm, .shtml i zmień ich właściwość Default na htmlfile
3. Przejdź do H_KEY_LOCAL_MACHINE\SOFTWARE\Classes, wyszukaj klucza .htm, .html, .shtm, /shtml i zmień ich właściwość Default na htmlfile
4. Uruchom ponownie outlook. Ma działać!
2016-06-01
Oto następujący problem. Z pliku pobieramy dane, które dalej mają być przesłane do bazy danych. Niestety niektóre dane w pliku są nieprawidłowe. Np. data 2016-02-31 …
Jak sobie z tym poradzić?
[System.DateTime]$d = Get-Date
[bool]$isDate = [System.DateTime]::TryParse('2016-02-31',[ref]$d)
if($isDate)
{
Write-Host "It is a date"
}
else
{
Write-Host "It is not a date"
}
O co chodzi i dlaczego właśnie takie kroki są potrzebne?
- Deklarujemy zmienna typu DateTime. Aby zmienna rzeczywiście powstała, musi być zainicjowana wartością. Mogła to być dowolna wartość, więc np. bieżąca data
- Typ DateTime posiada statyczną metodę TryParse, która próbuje konwertować napis na zmienną typu DateTime. Funkcja TryParse przyjmuje 2 argumenty: napis do skonwertowania i zmianną, gdzie zostanie zapisana skonwertowana data. Ta zmienna musi być przekazywana przez referencję stąd zapis [ref]. Przekazywanie parametru przez referencję pozwala funkcji zmodyfikować wartość zmiennej, która istnieje na zewnątrz ciała tej funkcji.
- TryParse zwraca $true, jeżeli konwersja się powiodła (i wtedy zmienna $d zawiera wartość daty) lub $false, jeżeli konwersja się nie powiodła (i tedy zmienna zawiera umowną wartość 0001-01-01).
2016-06-01
Chcesz prezent na DzieńDziecka? To proszę – masz. Zamawiając kursy na Udemy wpisz kod DZIENDZIECKA a cena spadnie o połowę!
Kurs SQL Server #1. Instalacja i narzędzia
Kurs SQL Server #2. Budowanie zapytań
Kurs PowerShell dla administratorów Windows

2016-05-31
Świat SQL to świat SQL, ale od czasu do tego świata wchodzi coś z zaświatów. Pierwszym takim gościem był XML, a wraz z nim typ XML, OPENXML, wbudowane metody typu XML, kóre pozwalały wykonywać na nim operacje ale również składnia FOR XML. I super, tylko XMLa, SQLowcy zwykle nie lubią…
Od wersji 2016 mamy nowego gościa: JSON. JSON ma o wiele prostszą składnię niż XML i jego obsługa w SQL też jest prostsza może więc da się go polubić?
Po pierwsze wynik zapytania można konwertować do postaci JSON. Składniowo działa to tak jak FOR XML. Masz do wyboru format AUTO lub PATH:

W przypadku FOR PATH możesz określić root-element, który spowoduje utworzenie JSON-owej tablicy obiektów JSON-owych. Alias kolumn określi jakie właściwości będzie posiadał utworzony obiekt. Czytaj dalej »