Dobře, přišel jsem na to. Způsob, jak toho dosáhnout, je pomocí funkce podřetězec, o které MS přesně říká, že pracuje s binárními soubory. Neříkají, že podřetězec vrátí pouze 8 000 bajtů, což mě vyhodilo.
Jinými slovy, pokud je datovým typem objektu blob image a použijete toto:
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)
Pokud však deklarujete proměnnou varbinary(max) a datový typ pole blob je varbinary(max) – nebo nějaká velikost, která je pro vás užitečná – pak použijte funkci podřetězec k vrácení částečné binární hodnoty do proměnné, kterou jste deklarovali. Tohle funguje dobře. Přesně takto:
Declare @PartialImage varbinary(max)
select @PartialImage = substring(BlobField, 0, 100000000) --1GB
from TableWithHugeBlobField
where ID = SomeIDValue
select DataLength(@PartialImage) -- should = 1GB
Otázka byla položena dříve, proč používat SQL k ukládání dat souborů? Je to platná otázka; Představte si, že musíte replikovat data jako soubory do stovek různých klientských zařízení (jako jsou iPhony), přičemž každý balíček je od druhého jedinečný, protože různí klienti mají různé potřeby, a pak je mnohem snazší naprogramovat ukládání balíčků souborů jako bloby do databáze. proti, než by bylo programově prohledávat složky, abyste našli správný balíček, který by se dal vysílat klientovi.