2013-06-07 3 views
6

MSDN page Diese Zustände:Warum ist eine Nullable-Rowversion-Spalte semantisch äquivalent zu einer Varbinary (8)?

A Nonnullable rowversion Spalte zu einer binary (8) Spalte semantisch äquivalent ist. Eine Nullable-Spalte für die Zeilenversion ist semantisch entspricht einer varbinary (8) -Spalte.

Da eine Nonnullable rowversion Spalte in eine binäre (8) Spalte semantisch äquivalent ist, sagen, warum ein Nullable-rowversion Spalte zu einer varbinary (8) Spalte und kein Nullable-binary (8) Spalte semantisch äquivalent ist?

Bedeutet dies, dass eine nullable rowversion-Spalte nicht semantisch äquivalent zu einer nullbaren binären (8) -Spalte ist?

Mein spezielles Beispiel ist, dass ich eine Tabelle haben werde, die Kopien von Zeilen aus anderen Tabellen enthalten wird. Einige Quellentabellen haben eine Zeilenversion und andere nicht. Daher muss die Spalte "rowversion" in meiner Tabelle Nullwerte akzeptieren. Ich möchte verstehen, warum (oder wenn) die Spalte varbinary (8) null statt binary (8) null sein sollte.

+0

@Andomar Ich habe meine Frage aktualisiert, um zu erklären, warum ich es gerne wissen würde. –

+0

Großartig, es ist jetzt besser. Eine enge Abstimmung kann jedoch nicht zurückgenommen werden. – Andomar

+2

Eine Spalte vom Typ 'binary (8)' wird ** immer ** 8 Bytes Speicher enthalten - unabhängig davon, was darin gespeichert ist - sogar 'NULL'. Eine NULL-fähige Version davon - 'varbinary (8)' - wird jedoch nur so viel Platz einnehmen, wie wirklich benötigt wird (plus einigen Overhead). –

Antwort

1

Eine binäre (8) ist eine Binärdatei, die genau 8 Bytes hat. Ein varbinary (8) ist ein Binary, das bis zu 8 Bytes hat. Eine Null ist 0 Bytes. Es muss eine Form sein, die 0 oder 8 Bytes haben kann. Also muss es varbinär sein.

+0

Eh ... Ich kaufe es nicht. Insbesondere kann ich eine Nullable-Binärdatei (8) (oder einen anderen Datentyp mit fester Breite) haben. –

+0

Was ist nicht zu kaufen? Nullwerte werden in einzelnen Bits in einem separaten Byte für die Datenzeile aufgezeichnet. Die erste Nullable-Spalte fügt dem Speicher ein Byte hinzu, und danach fügt jedes achte Nullwert-Byte dem Speicher ein Byte hinzu.'Null-Ness' ist bildlich in der Kopfzeile der Zeile gespeichert. Sobald dieses Bit für null hinzugefügt wurde, damit es null ist, hat es den gleichen Speicher wie ein varbinary. – jerrylagrou

+0

Ich sage, dass die Nullable-Eigenschaft einer Spalte und ob es sich um eine Spalte mit variierender Länge handelt, orthogonale Konzepte sind. Spezifisch für diesen Fall, warum bedeutet die Null-Fähigkeit der rowversion-Spalte notwendigerweise, dass es ein varbinay (8) NULL und nicht binär (8) null ist? Ersteres impliziert, dass es sich um einen Binärwert beliebiger Länge bis zu (einschließlich) 8 Byte (oder Null) handeln könnte, während Letzteres bedeutet, dass es sich um einen Binärwert von 8 Byte (oder Null) handeln kann. –