2013-06-07 12 views
6

Questo MSDN page afferma:Perché una colonna di conversione file nullable è semanticamente equivalente a un varbinary (8)?

Una colonna rowversion nonnullable è equivalente alla binario (8) colonna . Una colonna di conversione delle versioni Null è semanticamente uguale a equivalente a una colonna varbinary (8).

Dato che una colonna rowversion nonnullable è semanticamente equivalente ad un (8) colonna binaria, perché dire una colonna nullable rowversion è semanticamente equivalente ad un varbinary (8) colonna e non un binario (8) colonna Null?

Ciò implica una colonna di conversione di valori nulli non semanticamente semanticamente equivalente a una colonna di binario nullo (8)?

Il mio esempio particolare è che avrò una tabella che conterrà copie di righe da altre tabelle. Alcune tabelle di origine hanno una rowversion e altre no. Pertanto, la colonna "rowversion" nella mia tabella deve accettare valori nulli. Voglio capire perché (o se) la colonna dovrebbe essere varbinary (8) null invece di binary (8) null.

+0

@Andomar Ho aggiornato la mia domanda per spiegare perché mi piacerebbe sapere. –

+0

Grande, ora è meglio. Tuttavia, non è possibile ritrattare un voto ravvicinato. – Andomar

+2

Una colonna di tipo 'binary (8)' avrà ** sempre ** contiene 8 byte di memoria - indipendentemente da ciò che viene memorizzato al suo interno - anche 'NULL'. Una versione nullable di ciò - 'varbinary (8)' - tuttavia occuperà solo lo spazio necessario (oltre a qualche overhead). –

risposta

1

Un binario (8) è un binario che ha ESATTAMENTE 8 byte. Un varbinary (8) è un binario che ha fino a 8 byte. Un valore null è 0 byte. Deve essere un modulo che può avere 0 o 8 byte. Quindi deve essere varbinary.

+0

Eh ... Non lo compro. Nello specifico, posso avere un binario nullable (8) (o qualsiasi altro tipo di dati a larghezza fissa). –

+0

Cosa non comprare? I valori nulli sono registrati in singoli bit su un byte separato per la riga di dati. La prima colonna nullable aggiunge un byte all'archiviazione e ogni ottanta valori nulli successivamente aggiunge un byte alla memoria.'Null ness' è memorizzato in modo figurativo sull''intestazione 'della riga. Una volta aggiunto il bit per null per essere nullo, ha la stessa memoria di un varbinary. – jerrylagrou

+0

Sto dicendo che la caratteristica nullable di una colonna e se si tratta di una colonna di lunghezza variabile sono concetti ortogonali. Specifico per questo caso, perché il nullability della colonna rowversion implica necessariamente che sia un varbinay (8) NULL e non binario (8) nullo? Il primo implica che potrebbe essere un valore binario di qualsiasi lunghezza fino a (e compreso) 8 byte (o null) mentre il secondo implica che può essere un valore binario di 8 byte (o null). –