Beschneiden einer binären Spalte mit SQL-Abfrage

Ich habe ein paar Tische, jeweils mit einer binären Spalte mit einer bestimmten Größe (dh 8 Bytes, 16 Bytes, 32 Bytes, etc.) und einer Größenspalte, die die tatsächliche datagröße in dieser binären Spalte angibt, ich möchte alle verschieben Zeilen in eine varbinary (MAX) Tabelle.

Beispiel:
Binärdatenbeispiel

Ich suche eine SQL-Abfrage, die den Inhalt der Tabelle in eine neue Tabelle mit Varbinary (MAX) Spalte überträgt, aber es muss die data auf die angegebene Größe zuschneiden. zum Beispiel etwas Ähnliches wie möglich:
INSERT INTO newVarBinaryTable (new_id, new_data) select (id, newData = crop(data, size)) FROM oldBinaryTable

Hinweis: Meine DB befindet sich auf SQL server 2008

   
 INSERT INTO newVarBinaryTable (new_id, new_data) select id, cast(left(data, size) as varbinary(max)) FROM oldBinaryTable 

Substrierende Arbeiten für binäre Spalten. In deinem Fall brauchst du den Ausdruck

 SUBSTRING(data, 1, size) 

Hinweis Eine 8-Byte binäre (8) Spalte wäre 0x1122334455667788 anstelle von 0x12345678. Jedes Byte hat 2 Hex-character.

Sie können einfach Substring verwenden, wenn Sie bereits eine Spalte "Größe"

 declare @t table (id int identity, bin binary(8), size int) insert @t select 0x0102030405060708, 8 insert @t select 0x0102030405000000, 5 insert @t select 0x0102030405060000, 6 insert @t select 0x0102030405060700, 7 insert @t select 0x0102030405060708, 8 select id, CONVERT(varbinary(max), substring(bin, 1, size)) as newbin from @t order by id 

Ausgabe

 id newbin ----------- --------------------- 1 0x0102030405060708 2 0x0102030405 3 0x010203040506 4 0x01020304050607 5 0x0102030405060708 

Für Ihre data

 INSERT INTO newVarBinaryTable (new_id, new_data) select id, substring(data, 1, size) FROM oldBinaryTable