OK, ho capito. Il modo per farlo è con la funzione sottostringa, che secondo MS funziona con i binari. Quello che non dicono è che la sottostringa restituirà solo 8.000 byte, che è ciò che mi ha lanciato.
In altre parole, se il tipo di dati BLOB è immagine e usi questo:
select substring(BlobField,0,100000000)
from TableWithHugeBlobField
where ID = SomeIDValue
--all you'll get is the first 8K bytes (use DataLength function to get the size)
Tuttavia, se dichiari una variabile di varbinary(max) e il tipo di dati del campo blob è varbinary(max) o una dimensione che ti è utile, usa la funzione substring per riportare il binario parziale nella variabile che hai dichiarato. Questo funziona bene. Proprio così:
Declare @PartialImage varbinary(max)
select @PartialImage = substring(BlobField, 0, 100000000) --1GB
from TableWithHugeBlobField
where ID = SomeIDValue
select DataLength(@PartialImage) -- should = 1GB
La domanda è stata posta in precedenza, perché utilizzare SQL per archiviare i dati dei file? È una domanda valida; immagina di dover replicare i dati come file su centinaia di dispositivi client diversi (come iPhone), ogni pacchetto è unico dall'altro perché client diversi hanno esigenze diverse, quindi archiviare i pacchetti di file come BLOB su un database è molto più facile da programmare contro di quanto sarebbe scavare a livello di codice tra le cartelle per trovare il pacchetto giusto da trasmettere al client.