MS SQL Server sql_variant ir pilnīgi legāls kolonas datu tips, tādēļ mēs varam izveidot šādu tabulu:
create table #tŠāda tipa kolonnā, mēs varam glabāt praktiski jebkura datu tipa vērtību (ja šis datu tips ietilpst vienā datu lapā. Piemēram: nvarchar(4000) ir OK; nvarchar(max) nav OK; int ir OK; xml nav OK).
(
x sql_variant
)
Tātad, šādā tabulā var ievietot visas šīs rindas:
Insert Into #t (x) values (cast('3' as CHAR(1)))Datus var arī izgūt (īpaši man patīk DateTime un tas, ka skaitļiem parāda pareizi zīmes aiz komata):
Insert Into #t (x) values (cast('3' as NCHAR(1)))
Insert Into #t (x) values (cast('3' as VarCHAR(3)))
Insert Into #t (x) values (cast('3' as NVarCHAR(3)))
Insert Into #t (x) values (cast(3 as int))
Insert Into #t (x) values (cast(3 as decimal(18,1)))
Insert Into #t (x) values (cast(3 as decimal(18,3)))
Insert Into #t (x) values (cast(3 as decimal(18,4)))
Insert Into #t (x) values (cast(3.00003 as decimal(18,5)))
Insert Into #t (x) values (GETDATE())
Insert Into #t (x) values (cast(Replicate('3',4000) as nchar(4000)))
Tas tiek panākts tādējādi, ka kopā ar vērtību, tiek glabāts arī datu tips, kas kolonnā tika saglabāts (apskatīties vērtības var izmantojot SQL_VARIANT_PROPERTY funkciju):
Select x,
SQL_VARIANT_PROPERTY (x, 'BaseType') BaseType,
SQL_VARIANT_PROPERTY (x, 'Precision') Precision,
SQL_VARIANT_PROPERTY (x, 'Scale') Scale,
SQL_VARIANT_PROPERTY (x, 'TotalBytes') TotalBytes
From #t
Iegūstam rezultātu:
Plašāk par sql_variant datu tipa lietošanu rakstīts msdn.
Tā jau datu tips interesants, bet neizskatās, ka varētu būt daudz labu iemeslu šo datu tipu lietot..
Nav komentāru:
Ierakstīt komentāru