Freigeben über


Spalten mit langen Werten

Gilt für: Windows | Windows Server-

Spalten mit langen Werten

Die ESE-Spaltentypen JET_coltypLongText und JET_coltypLongBinary werden als Spaltentypen mit langen Werten bezeichnet. Diese Spalten sind große Zeichenfolgen und große binäre Objekte, die möglicherweise in separaten B+-Strukturen vom primären Index gespeichert werden können. Wenn lange Werte getrennt vom primären Datensatz gespeichert werden, werden sie intern auf eine lange Wert-ID (LID) und byte offset und als Datenstrom zugegriffen. Lange Wertspalten werden der Tabelle im Aufruf von JetAddColumn mit dem Coltyp Element der JET_COLUMNDEF-Struktur hinzugefügt, die entweder auf JET_coltypLongText oder JET_coltypLongBinary festgelegt ist. Die maximale Größe eines Spaltenwerts "Langer Text" oder "Long Binary" beträgt 2 GB -1.

ESE unterstützt Anfüge-, Bytebereich-Überschreibungs- und Größenvorgänge für lange Wertspalten, um effiziente Streamimplementierungen für diese Spaltentypen zu unterstützen. Standardmäßig werden langwertige Daten in einer separaten B+-Struktur gespeichert, wenn sie größer als 1024 Byte ist, oder wenn der Datensatz nicht auf eine einzelne Datenbankseite passt, wenn die Langen Wertdaten im Datensatz gespeichert werden. Die Anwendung hat die Möglichkeit, das Standardverhalten außer Kraft zu setzen, indem Optionen festgelegt werden, um lange Wertdaten im Datensatz (JET_bitSetIntrinsicLV) zu speichern oder zu erzwingen, dass sie in der separaten B+-Struktur (JET_bitSetSeparateLV) gespeichert werden. Diese Werte werden im grbit--Parameter in JetSetColumn-oder im grbit Member festgelegt, JET_SETCOLUMN im Aufruf von JetSetColumns wie folgt verwendet werden:

  • Append: (JET_bitSetAppendLV)

  • Byte Range Overwrite: (JET_bitSetOverwriteLV)

  • Größe festlegen: (JET_bitSetSizeLV)

  • Separate Erzwingung: (JET_bitSetSeparateLV)

  • Speichern im Datensatz: (JET_bitSetIntrinsicLV)

Die Daten für lange Werte werden festgelegt, indem der Offset in das Blob für lange Werte und die Länge der Langen Wertdaten im Blob angegeben wird. Der Offset auf den long value blob wird im ibLongValue Member der JET_SETINFO Struktur (für JetSetColumn) oder im ibLongValue Member der JET_SETCOLUMN Struktur (für JetSetColumns) festgelegt. Der pvData Member von JET_SETCOLUMNund pvData Parameter im Aufruf von JetSetColumn enthält die langen Wertdaten. Aktualisierungen an langen Wertspalten müssen innerhalb einer Transaktion ausgeführt werden.

Die langen Wertdaten werden immer in einer separaten Tabelle gespeichert, wenn die Anwendung die JET_bitSetSeparateLV oder JET_bitSetIntrinsicLV festlegt, andernfalls wird sie heuristisch entschieden. ESE speichert den langen Wert getrennt, wenn er größer als 1024 Byte ist oder wenn der Datensatz nicht auf eine einzelne Datenbankseite passt, wenn er im Datensatz gespeichert ist.

Das folgende Diagramm zeigt die langen Wertdaten, die in einer separaten Tabelle gespeichert sind. Wenn ein langer Wert außerhalb des Datensatzes gespeichert wird, wird eine neue long valued ID erstellt, um auf seinen Wert zu verweisen. Auf diese Weise können mehrere Datensätze auf denselben Spaltenwert verweisen. Die Anzahl der Verweise auf die Daten wird erhöht, wenn mehrere Datensätze in den Daten auf die gleichen langen Wertdaten verweisen.

ESE_Documentation_longvaluedtree2

ESE unterstützt auch ein einzelnes Instanzspeicherfeature, mit dem mehrere Datensätze auf dasselbe große binärobjekt verweisen können, als hätte jeder Datensatz eine eigene Kopie der Informationen; So vermeiden Sie doppelte Kopien der Spaltenwertdaten. Dieses Feature ist im Aufruf von JetPrepareUpdate aktiviert, wobei die option JET_prepInsertCopy im parameter prep festgelegt ist.