Oké, ik heb het bedacht. De manier om dit te doen is met de substring-functie, die volgens MS nauwkeurig werkt met binaire bestanden. Wat ze niet zeggen, is dat substring slechts 8.000 bytes zal retourneren, wat mij deed rijzen.
Met andere woorden, als het blob-gegevenstype afbeelding is en u dit gebruikt:
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)
Als u echter een variabele van varbinary(max) declareert en het gegevenstype van het blobveld is varbinary(max) - of een grootte die nuttig voor u is - gebruik dan de functie substring om het gedeeltelijke binaire bestand terug te brengen in de variabele die u hebt gedeclareerd. Dit werkt gewoon goed. Gewoon zo:
Declare @PartialImage varbinary(max)
select @PartialImage = substring(BlobField, 0, 100000000) --1GB
from TableWithHugeBlobField
where ID = SomeIDValue
select DataLength(@PartialImage) -- should = 1GB
De vraag werd eerder gesteld, waarom zou u SQL gebruiken om bestandsgegevens op te slaan? Het is een geldige vraag; stel je voor dat je gegevens als bestanden moet repliceren naar honderden verschillende client-apparaten (zoals iPhones), waarbij elk pakket uniek is van de andere omdat verschillende clients verschillende behoeften hebben, dan is het opslaan van de bestandspakketten als blobs in een database een stuk eenvoudiger te programmeren dan zou het zijn om programmatisch door mappen te graven om het juiste pakket te vinden om naar de client te streamen.