ठीक है, मैंने पता लगा लिया। ऐसा करने का तरीका सबस्ट्रिंग फ़ंक्शन के साथ है, जिसे एमएस सटीक रूप से बाइनरी के साथ काम करता है। वे जो नहीं कहते हैं वह यह है कि सबस्ट्रिंग केवल 8,000 बाइट लौटाएगा, जिसने मुझे फेंक दिया।
दूसरे शब्दों में, यदि ब्लॉब डेटा प्रकार छवि है और आप इसका उपयोग करते हैं:
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) का एक चर घोषित करते हैं और ब्लॉब फ़ील्ड डेटा प्रकार varbinary(max) है - या कुछ आकार जो आपके लिए उपयोगी है - तो आंशिक बाइनरी को आपके द्वारा घोषित चर में वापस लाने के लिए सबस्ट्रिंग फ़ंक्शन का उपयोग करें। यह ठीक काम करता है। बस इस तरह:
Declare @PartialImage varbinary(max)
select @PartialImage = substring(BlobField, 0, 100000000) --1GB
from TableWithHugeBlobField
where ID = SomeIDValue
select DataLength(@PartialImage) -- should = 1GB
प्रश्न पहले उठाया गया था, फ़ाइल डेटा को संग्रहीत करने के लिए SQL का उपयोग क्यों करें? यह एक वैध प्रश्न है; कल्पना करें कि आपको सैकड़ों अलग-अलग क्लाइंट डिवाइस (जैसे iPhones) में डेटा को फ़ाइलों के रूप में दोहराने की आवश्यकता है, प्रत्येक पैकेज दूसरे से अद्वितीय है क्योंकि अलग-अलग क्लाइंट की अलग-अलग ज़रूरतें हैं, फिर फ़ाइल पैकेज को डेटाबेस पर ब्लॉब्स के रूप में संग्रहीत करना बहुत आसान है प्रोग्राम क्लाइंट को स्ट्रीम करने के लिए सही पैकेज खोजने के लिए फ़ोल्डर्स के माध्यम से प्रोग्रामेटिक रूप से खोदना होगा।