Ok, jeg fandt ud af det. Måden at gøre dette på er med substring-funktionen, som MS præcist siger fungerer med binære filer. Hvad de ikke siger er, at understrengen kun vil returnere 8.000 bytes, hvilket er det, der kastede mig ud.
Med andre ord, hvis blob-datatypen er billede, og du bruger denne:
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)
Men hvis du erklærer en variabel af varbinary(max) og blob-feltdatatypen er varbinary(max) - eller en størrelse, der er nyttig for dig - så brug delstrengfunktionen til at bringe den delvise binære tilbage til den variabel, du erklærede. Det her fungerer fint. Bare sådan her:
Declare @PartialImage varbinary(max)
select @PartialImage = substring(BlobField, 0, 100000000) --1GB
from TableWithHugeBlobField
where ID = SomeIDValue
select DataLength(@PartialImage) -- should = 1GB
Spørgsmålet blev stillet tidligere, hvorfor bruge SQL til at gemme fildata? Det er et gyldigt spørgsmål; Forestil dig, at du er nødt til at replikere data som filer til hundredvis af forskellige klientenheder (såsom iPhones), hver pakke er unik fra den anden, fordi forskellige klienter har forskellige behov, så er det meget nemmere at programmere filpakkerne som blobs i en database imod, end det ville være at programmæssigt grave gennem mapper for at finde den rigtige pakke til at streame ud til klienten.