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