SQL: Profiler nie zapisuje INSERT/UPDATE/DELETE

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 ;)

By Rafał Kraik in SQL

SQL: Collation conflict – tymczasowa procedura

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.

By Rafał Kraik in SQL

Outlook: operacja została anulowana z powodu ograniczeń nałożonych na ten komputer

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 htmlfileoutlook_registry

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ć!

By Rafał Kraik in Helpdesk

Powershell: Sprawdzenie czy napis zawiera datę

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).
By Rafał Kraik in Power Shell

Promocja na kurs SQL i Powershell

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

sale

By Rafał Kraik in Aktualności

SQL 2016: JSON w SQL

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:

FOR_JSON

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 »

By Rafał Kraik in SQL 2016

SQL Saturday. 1 pażdziernika w Krakowie!

2016-05-30

Ciekawy event nas czeka w październiku w Krakowie. SQL Saturday zawita 1 października 2016 do Krakowa. Wymagana jest rejestracja, ale udział jest za darmo. Zapłacić trzeba tylko za catering, ale to tylko dla łasuchów :)

sqlsat534_header (1)

 

 

By Rafał Kraik in Aktualności