OK, rozgryzłem to. Sposobem na to jest funkcja substring, o której MS dokładnie mówi, że działa z plikami binarnymi. Nie mówią, że podciąg zwróci tylko 8000 bajtów, co mnie rzuciło.
Innymi słowy, jeśli typem danych blob jest obraz i używasz tego:
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)
Jeśli jednak zadeklarujesz zmienną varbinary(max), a typem danych pola obiektu blob jest varbinary(max) — lub jakiś rozmiar, który jest dla Ciebie przydatny — użyj funkcji substring, aby przywrócić częściowy plik binarny do zadeklarowanej zmiennej. To działa dobrze. Po prostu tak:
Declare @PartialImage varbinary(max)
select @PartialImage = substring(BlobField, 0, 100000000) --1GB
from TableWithHugeBlobField
where ID = SomeIDValue
select DataLength(@PartialImage) -- should = 1GB
Pytanie zostało zadane wcześniej, po co używać SQL do przechowywania danych w plikach? To ważne pytanie; wyobraź sobie, że musisz replikować dane jako pliki na setki różnych urządzeń klienckich (takich jak iPhone), każdy pakiet jest inny od drugiego, ponieważ różni klienci mają różne potrzeby, wówczas przechowywanie pakietów plików jako obiektów BLOB w bazie danych jest o wiele łatwiejsze do zaprogramowania niż byłoby to programistyczne przekopywanie się przez foldery w celu znalezienia odpowiedniego pakietu do wysłania do klienta.