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

SQL 2016: Live query statistics. Wodotrysk, czy przydatne narzędzie?

2016-05-30

Live Query Statistics to prezentowane na żywo postępy w wykonaniu zapytania wyświetlane na planie zapytania. Sama idea jest bardzo podobna do trybu debuggowania pakietu SSIS, gdzie widać, jak dane przepływają pomiędzy poszczególnymi komponentami pakietu. Tutaj prezentowane są podobne wyniki, ale dotyczy to operatorów planu zapytania:

live query statistics

W przypadku tego planu linie ciągłe prezentują kroki zapytania już wykonane. Linie przerywane to etapy przewarzania zapytania, które dopiero będą lub aktualnie są przetwarzane. Dodatkowo pod każdym operatorem znajdują się liczniki pokazujące, jak długot en operator pacuje i jaka część pracy jest już wykonana.

Ktoś mógłby powiedzieć – no i co z tego. Ładnie wygląda, ale jaki z tego pożytek? W sumie racja, chociaż patrząc w taki rysowany na żywo plan zapytania bardzo łatwo będzie wskazać etap, który zabrał najwięcej czasu. Wyraźnie widać też, które części wykonywały się równolegle a które szeregowo, jedna po drugiej. Niby nic, ale we wstępnej analizie problemu, może się rzeczywiście przydać.

Aby zobaczyć live query plan włacz przycisk na pasku narzędziowym (obok include actual execution plan) lub kliknij prawym przyciskiem w oknie query i wybierz „live query plan”. Jeżeli sesja ma włączoną tę opcję lub wykonano „set showplan xml on”, to statystyki na żywo można też oglądać w Activity Monitorze.

By Rafał Kraik in SQL 2016