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 =])

