Al momento ho un setup tabella di database come segue (EAV - motivi di lavoro sono validi):Esistono vantaggi nell'utilizzo di sql_variant rispetto a varchar in SQL Server?
- Id - int (PK)
- Key - unico nel suo genere, varchar (15)
- Value - varchar (1000)
Questo mi consente di aggiungere valori misti nel mio database come coppie chiave/valore. Per esempio:
1 | 'Some Text' | 'Hello World'
2 | 'Some Number' | '123456'
etc.
Nel mio codice C# Io uso ADO.Net utilizzando reader.GetString(2);
per recuperare il valore come una stringa, quindi avere il mio codice Convertire altrove in base alle esigenze, per esempio ... Int32.ParseInt(myObj.Value);
. Sto cercando di migliorare la mia tabella modificando eventualmente la colonna dei valori su un tipo di dati sql_variant
, ma non so quale sarebbe il vantaggio di ciò? Fondamentalmente, c'è qualche vantaggio ad avere la colonna valore di sql_variant
rispetto a varchar(1000)
?
Per essere più chiaro, ho letto da qualche parte che sql_variant ottiene rinviato come nvarchar (4000) al client che effettua la chiamata (ahi)! Ma, non posso lanciarlo nel suo tipo prima di restituirlo? Ovviamente il mio codice dovrebbe essere regolato per memorizzare il valore come oggetto invece di un valore stringa. Immagino, quali sono i vantaggi/svantaggi dell'uso di sql_variant
rispetto ad altri tipi nella mia situazione attuale? Oh, e vale la pena ricordare che tutto quello che ho intenzione di memorizzare sono datetimes, stringhe e tipi numerici (int, decimal, ecc.) Nella colonna value; Non ho intenzione di archiviare e blob o immagini o altro.
Come [Aaron Bertrand menziona nelle sue * Cattive abitudini a calci - utilizzando il tipo di dati errato *] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to -kick-using-the-wrong-data-type.aspx): * Usando SQL_VARIANT affatto * - è ** non ** una buona idea. Non usarlo Non ottieni alcun vantaggio, ma molti inconvenienti ... –
Al di fuori di affermare che sql_variant è sbagliato, stai dicendo che varchar (1000) è la strada da percorrere nella mia esatta situazione? –
Come pensi che l'uso di un sql_variant migliorerà la tua tabella? –