Kategoria Developing T-SQL

Egzamin 70-464: Developing Microsoft SQL Server 2012 Databases

W dniu dzisiejszym zdałem egzamin 70-464 Developing Microsoft SQL Server 2012 Databases. Jest to pierwszy krok do uzyskania certyfikatu MCSE Data Platform

Czytaj dalej

Konwersja dużych wartości hexadecimal na liczbę dziesiętną.

W MS SQL Server, a dokładnie w języku T-SQL występują pewne ograniczenia podczas konwersji typu hexadecimal na układ dziesiętny. Poniżej przedstawię rozwiązanie problemu.

Do konwersji typów varbinaty (liczby  przedstawione w układzie szestnastkowym) na układ dziesiętny służą dwie funkcje T-SQL. Są nimi CAST() oraz CONVERT(). W tym przypadku lepiej będzie używać funkcji CONVERT().

Składnia:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

data_type [ ( length ) ] – typ danych na który będzie konwertowane wyrażenie.

length – Opcjonalnie długość dla wybranych typów danych

expression – konwertowane wyrażenie

style – opcjonalny styl konwersji.

W przypadku typów varbinary są dostępne trzy style:

SELECT CONVERT(VARBINARY(16), 'A1',0)

SELECT CONVERT(VARBINARY(16), '0xA1',1)

SELECT CONVERT(VARBINARY(16), 'A1',2)

Style:

0 – uzyskuje się w wyniku kody ASCII z podanego wyrażenia. W tym przypadku wynik to 0x4131 czyli 0x jako opis wyrażenia binarnego, 41 jako kod ASCII ‘A’, oraz 31 jako kod ASCII ‘1’

1 – w wyniku uzyskuje się kod binarny o wartości 0xA1...

Czytaj dalej

Różnice pomiędzy funkcjami ISNULL i COALESCE

Funkcje ISNULL oraz COALESCE wspierają nas przy pracy z wartościami NULL. Obie te funkcje spełniają tę sama rolę lecz ich zachowanie się różni. Poniżej opiszę te funkcje oraz przybliżę różnice występujące pomiędzy nimi.

Pierwszą omawianą funkcją będzie ISNULL.

ISNULL

Składnia:

ISNULL ( check_expression , replacement_value )

Argumenty:

check_expression – Wyrażenie dowolnego typu, które jest sprawdzane czy jego wartość jest NULL.

replacement_value – Wyrażenie, które jest zwracane w przypadku gdy wartość  wyrażenia check_expression jest NULL.

Funkcja ta przyjmuje tylko dwa parametry.

Funkcja ta zwraca check_expression w przypadku gdy jego wartość jest różna od NULL a w przeciwnym przypadku zwraca wartość  replacement_value.

z1

Rysunek 1 Funkcja ISNULL z pierwszym pustym argumentem

W powyższym kodzie wartość pierwszego argumentu jest NULL, więc funkcja zwraca wartość drugiego argumentu czyli w tym przypadku 2.

z2Rysunek 2 Wynik działania

Zarówno w przypadku gdy oba argumenty nie przyjmują wartości NULL

z3

Rysunek 3 Funkcja ISNULL – podane wartości dwóch argumentów

jak i w przypadku gdy drugi argument przyjmuje wartość NULL

z5

Czytaj dalej

Kontrola i zmiana ustawionego IDENTITY

Niekiedy zdarza się, że chcemy sprawdzić jaka będzie wartość w polu z ustawioną właściwością IDENTITY po dodaniu nowego rekordu. Często też zdarza się sytuacja, że musimy wartość zmienić.

W celu rozwiązania tego problemu należy użyć polecenia DBCC CHECKIDENT. Przykład skryptu przedstawionego poniżej:

DBCC CHECKIDENT ('dbo.Test’, NORESEED)

W odpowiedzi uzyskuje się komunikat:

Checking identity information: current identity value '9', current column value '9'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Komunikat ten nas informuje, że w tabeli dbo.Test aktualna wartość dla pola z właściwościa IDENTITY ustawiona jest na 9.

Jak zmienić wartość IDENTITY:

Należy użyć polecenia DBCC CHECKIDENT. Przykład skryptu przedstawionego poniżej:

DBCC CHECKIDENT ('dbo.Test’, RESEED,50) <code>--gdzie 50 to nowa wartość

W odpowiedzi uzyskuje się komunikat:

Checking identity information: current dentity value '9', current column value '50'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Uwaga:

1) Należy uważać, aby nie podać wartości już użytej, cz...

Czytaj dalej

Dodanie właściwości IDENTITY przy założonej tabeli

W chwili gdy jest założona tabela a trzeba dodać do wybranego pola właściwość IDENTITY należy jedynie założyć taką tabelę od nowa. Nie ma możliwości dodania właściwości IDENTITY poprzez ALTER TABLE.

Rozwiązaniem powyższego problemu jest utworzenie od nowa tabeli z prawidłową strukturą. Należy pamiętać  o zrobieniu kopii tabeli.

Należy wykonać następujące czynności:

  1. Usuwamy wszystkie powiązania do tabeli.
  2. Zawsze sprawdzamy (TAKI NAWYK!!!) czy istnieje tabela tymczasowa. Jeżeli tak to ją kasujemy.
  3. Tworzymy tabelę tymczasową i kasujemy naszą właściwą tabelę (wcześniej radziłbym zrobić jej kopie)
  4. Tworzymy strukturę nowej tabeli z IDENTITY
  5. Dopisujemy dane i sprzątamy po sobie kasując tabelę tymczasową.

Poniżej przedstawiono przykładowy kod:

-- Drop temp table if they already exist
IF OBJECT_ID('TempDB..#Test', 'U') IS NOT NULL DROP TABLE #Test;

-- Create the temp table
SELECT * INTO #Test FROM [dbo].[TEST]
DROP TABLE [dbo].[TEST]

CREATE TABLE [dbo]...
Czytaj dalej

IIF i Choose w SQL Server 2012

W MS SQL Server 2012 język T-SQL został rozszerzony o wiele funkcji. W grupie funkcji logicznych można wyróżnić dwie:

  • Funcja logiczna IIF()
  • Funkcja logiczna Choose()

Funkcja logiczna IIF()

Nowa funkcja logiczna IIF(), dostępna w MS SQL Server 2012 zwraca jedną z dwóch wartości w zależności od tego, czy wynikiem wyrażenia logicznego jest PRAWDA(TRUE) lub FAŁSZ(FALSE).

Poniżej przedstawiono składnię:

gdzie:

boolean_expression – poprawne wyrażenie logiczne
true_value – wartość zwracana w przypadku gdy wartością wyrażenia boolean_expression jest True.
false_value – wartość zwracanaw przypadku gdy wartością wyrażenia boolean_expression jest False.

A oto przykład zastosowania:

SELECT IIF ( 64 > 20, 'TRUE', 'FALSE' ) AS Result1;
SELECT IIF ( 32 > 50, 'TRUE', 'FALSE' ) AS Result2;

Można również stosować zagnieżdżanie funkcji IIF(), np.:

DECLARE @value INT = 100,
@marker varchar(4) = 'Free';
SELECT IIF(@value < 100,
IIF(...
Czytaj dalej
DBBS