SQL_VARIANT_PROPERTY ()

Z dokumentacji technet ( http://msdn.microsoft.com/en-us/library/ms178550(v=sql.105).aspx )

Returns the base data type and other information about a sql_variant value.

Funkcja teoretycznie służy do sprawdzenia właściwości takich jak: typ,precyzja, ilośc bajtów czy collation dla danych przetrzymywanych w uniwersalnym typie danych sql server jakim jest sql_variant.
Ale nic nie stoi na przeszkodzie by sprawdzać nią inne wyrażenia, co do których nie jesteśmy pewni jaki mają typ czy długość.

Przykład:

Sprawdzamy jakiego typu jest GETDATE() 🙂

SELECT SQL_VARIANT_PROPERTY( GETDATE(),'BaseType')

Przykład 2:

Teraz trochę skomplikujemy, wygenerujmy w locie napis i dwa wyliczenia. Sprawdzimy końcowy typ danych.

SELECT  *,
nap_typ = SQL_VARIANT_PROPERTY(napisik,'BaseType'),
nap_bytes = SQL_VARIANT_PROPERTY(napisik,'MaxLength'),
nap_collate = SQL_VARIANT_PROPERTY(napisik,'Collation'),
wyn_typ = SQL_VARIANT_PROPERTY(wynik,'BaseType'),
wyn_prec = SQL_VARIANT_PROPERTY(wynik,'Precision'),
wyn_scale = SQL_VARIANT_PROPERTY(wynik,'Scale'),
wyn2_typ = SQL_VARIANT_PROPERTY(wynik2,'BaseType'),
wyn2_prec = SQL_VARIANT_PROPERTY(wynik2,'Precision'),
wyn2_scale = SQL_VARIANT_PROPERTY(wynik2,'Scale')

FROM    ( VALUES
        ( N'jakiś napis: ' + @@SERVERNAME + ' - ' + @@LANGUAGE, 
        LOG(POWER(SQRT(1.2 / 2.555), 4))* PI(),
        LOG(POWER(SQRT(1.2 / 2.555), 4))* CAST(PI() AS DECIMAL(38,10))
) ) z ( napisik, wynik, wynik2 ) 

Wynik (kliknij w obrazek aby powiększyć)

Możemy zatem 'w locie’ sprawdzać nasz typ danych, zwracany zaraz obok wyniku, np. aby kontrolować pomyłki przy zmienności precyzji wyliczeń (testy jednostkowe =])

POST PIERWWOTNIE OPUBLIKOWANY JAKO TSQL NA DZIŚ #20

Dodaj komentarz