wiem, masz już jakieś dobre odpowiedzi, ale myślę SQL_VARIANT_PROPERTY został źle zrozumiany.
Używasz SQL_Variant_Property z kolumną, a następnie wskazujesz, czego chcesz na jego właściwości metadanych. Jednak jeśli jest zerowy, niewiele ci to mówi.
EG:
declare
@Start date = getdate()
, @End datetime= getdate()
, @Int int = 1
, @DateNull date
;
select
sql_variant_property(@Start, 'BaseType')
, sql_variant_property(@End, 'BaseType')
, sql_variant_property(@Int, 'BaseType')
, sql_variant_property(@DateNull, 'BaseType')
Wrócimy trzy typy danych oraz null. Obsługa NULL jest dużą częścią SQL. Bardzo wielu ludzi, łącznie z mną, czasami chce obsłużyć wartość zerową z wartością reprezentującą ją lub w innym czasie nie dbając o nią. Wariant SQL TYLKO DZIAŁA dla wypełnionej wartości z argumentem: "BaseType", w przeciwnym razie zwróci wartość zerową. O ile mi wiadomo, wynika to z tego, że SQL mówi: "Nie masz tu żadnych danych, nic do określenia dla użycia pamięci."
Ogólnie określę isnull (@thing, 0) podczas pracy z liczbami całkowitymi, gdy wyraźnie chcę, aby zbiór danych zawierał zera dla niewiadomych. Kiedy indziej mogę chcieć, aby użytkownik wiedział o wystąpieniu pustej wartości, coś innego nie było (np. "Nic", "brak") dla raportu. Jeszcze innym razem można użyć koalescencji, aby uzyskać szeroki wachlarz możliwości łączenia (@thing, @otherthing, @yotherotherthing, "unknown").
Myślę, że w kodzie, którego jesteś świadkiem, ktoś coś zmienia, gdy nie jestem pewien, gdzie naprawdę trzeba by coś takiego zrobić. Typ danych kolumny w tabeli jest przechowywany w tym, co musi być, a SQL nie będzie przechowywać w niej pamięci, gdy jest ona równa NULL. Tak więc potrzeba zmiany wydaje się arbitralne IMHO. Wiem, że można obsłużyć większe zużycie pamięci, gdy oczekujesz więcej zer z opcją SPARSE, która została wprowadzona Wierzę w SQL 2008. Ale nie wiem, kiedy rzucić coś, co nie zużywa prawie nic więcej.
Czy próbowałeś google "null datatype"? Może się okazać, że nie jest to typ danych ... a przyczyną działania powyższego kodu jest to, że varchar może mieć wartość zerową. – RandomUs1r