OK, tôi đã tìm ra nó. Cách thực hiện điều này là với hàm chuỗi con, mà MS nói chính xác là hoạt động với các mã nhị phân. Những gì họ không nói là chuỗi con sẽ chỉ trả về 8.000 byte, đó là những gì tôi đã ném.
Nói cách khác, nếu kiểu dữ liệu blob là hình ảnh và bạn sử dụng:
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)
Tuy nhiên, nếu bạn khai báo một biến varbinary (max) và kiểu dữ liệu trường blob là varbinary (max) - hoặc một số kích thước hữu ích cho bạn - thì hãy sử dụng hàm chuỗi con để đưa lại một phần nhị phân vào biến mà bạn đã khai báo. Điều này hoạt động tốt. Giống như thế này:
Declare @PartialImage varbinary(max)
select @PartialImage = substring(BlobField, 0, 100000000) --1GB
from TableWithHugeBlobField
where ID = SomeIDValue
select DataLength(@PartialImage) -- should = 1GB
Câu hỏi đã được đặt ra trước đó, tại sao lại sử dụng SQL để lưu trữ dữ liệu tệp? Đó là một câu hỏi hợp lệ; hãy tưởng tượng bạn đang phải sao chép dữ liệu dưới dạng tệp tới hàng trăm thiết bị khách khác nhau (như iPhone), mỗi gói là duy nhất với gói kia vì các máy khách khác nhau có nhu cầu khác nhau, khi đó việc lưu trữ các gói tệp dưới dạng các đốm màu trên cơ sở dữ liệu sẽ dễ lập trình hơn rất nhiều chống lại so với việc đào qua các thư mục theo chương trình để tìm gói phù hợp để phát trực tiếp cho khách hàng.