Добре, разбрах го. Начинът да направите това е с функцията substring, за която MS точно казва, че работи с двоични файлове. Това, което не казват е, че поднизът ще върне само 8 000 байта, което ме хвърли.
С други думи, ако типът данни на blob е изображение и използвате това:
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)
Въпреки това, ако декларирате променлива на varbinary(max) и типът данни на полето blob е varbinary(max) - или някакъв размер, който е полезен за вас - тогава използвайте функцията substring, за да върнете частичния двоичен файл в променливата, която сте декларирали. Това работи добре. Точно така:
Declare @PartialImage varbinary(max)
select @PartialImage = substring(BlobField, 0, 100000000) --1GB
from TableWithHugeBlobField
where ID = SomeIDValue
select DataLength(@PartialImage) -- should = 1GB
Въпросът беше зададен по-рано, защо да използвате SQL за съхраняване на файлови данни? Това е валиден въпрос; представете си, че трябва да репликирате данни като файлове на стотици различни клиентски устройства (като iPhone), като всеки пакет е уникален от другия, защото различните клиенти имат различни нужди, тогава съхраняването на файловите пакети като петна в база данни е много по-лесно за програмиране срещу това би било програмно копаене в папки, за да се намери правилният пакет за поточно предаване към клиента.