के माध्यम से एसक्यूएल से बाइनरी फ़ाइल डेटा (छवियों) का निर्यात करना मैं एक बड़ी संख्या में छवि फ़ाइलों को निर्यात करने की कोशिश कर रहा हूं, जो आंतरिक रूप से SQL डेटाबेस में बाइनरी डेटा के रूप में संग्रहीत हैं।एक संग्रहीत प्रक्रिया
एसक्यूएल में संग्रहीत प्रक्रियाओं को लिखने के लिए काफी नया होने के नाते, मैं कुछ उपयोगी मार्गदर्शिकाओं में आया हूं कि इसे कैसे संग्रहीत किया जा सकता है, लेकिन मुझे कुछ याद आ रहा है।
मैं स्थानीय रूप से SQL Server 2008 R2 चला रहा हूं, और मैं फ़ाइलों को अपने सी: \ ड्राइव पर किसी फ़ोल्डर में लिखने की कोशिश कर रहा हूं।
यहाँ मैं अब तक राशि का व्यापार हिस्सा है:
BEGIN
DECLARE @cmd VARCHAR(8000)
DECLARE @result int
DECLARE curExportBinaryDocs CURSOR FAST_FORWARD FOR
SELECT 'BCP "SELECT Photograph_Data FROM [ALBSCH Trial].[dbo].[Photograph] WHERE Photograph_ID = '
+ CAST(Photograph_ID AS VARCHAR(500)) + '" queryout "' + @OutputFilePath
+ CAST(Photograph_ID AS VARCHAR(500)) + '.jpg"' + ' -n -T'
FROM dbo.Photograph
OPEN curExportBinaryDocs
FETCH NEXT FROM curExportBinaryDocs INTO @cmd
WHILE @@FETCH_STATUS = 0
BEGIN
--PRINT @cmd
EXEC @result = xp_cmdshell @cmd
FETCH NEXT FROM curExportBinaryDocs INTO @cmd
END
CLOSE curExportBinaryDocs
DEALLOCATE curExportBinaryDocs
END
'@result' हमेशा '1' के लिए सेट किया जा रहा है (विफल) xp_cmdshell कॉल के बाद। सभी टेबल नाम/फ़ील्ड सही हैं, इसलिए मुझे संदेह है कि मेरे बीसीपी कॉल में कुछ गड़बड़ है, लेकिन मुझे यकीन नहीं है कि आगे क्या प्रयास करना है।
कोई भी मदद या सलाह का स्वागत किया जाएगा।
आप SQL कैसे चला रहे हैं? एसक्यूएल उपयोगकर्ता के क्रेडेंशियल्स के तहत चलता है ... क्या उस उपयोगकर्ता को आउटपुट फ़ोल्डर में फाइलें बनाने का अधिकार है? –
मैं अपने सामान्य विंडोज उपयोगकर्ता नाम और विंडोज प्रमाणीकरण का उपयोग कर SQL सर्वर में लॉग इन कर रहा हूं। मैंने यहां उल्लिखित विधि का उपयोग करके एक समाधान प्राप्त करने में कामयाब रहा है: http://stackoverflow.com/questions/1366544/how-to-export-image-field-to-file लेकिन यदि संभव हो तो मैं प्राप्त करना चाहता हूं समस्या के निचले हिस्से में मैं अपनी मूल विधि के साथ बस मन की शांति के लिए हूं! – ChrisMurray
मेरा मानना है कि आप जो कर रहे हैं वह थोड़ा गलत है। क्या आप SQL सर्वर के "फ़ाइल-स्ट्रीम सक्षम डेटाबेस" के बारे में जानते हैं। यह आपको हार्ड ड्राइव पर बीएलओबी स्टोर करने की अनुमति देता है जबकि बीएलओबी अभी भी आपके SQL सर्वर द्वारा बनाए रखे जाते हैं। इस बीएलओबी को ड्राइव पर फेंकने के बाद, आपके एप्लिकेशन को केवल आपके डेटाबेस में एक क्वेरी बनाने और ऑब्जेक्ट प्राप्त करने की आवश्यकता है। इसके अलावा, कर्सर का उपयोग करना अच्छी बात नहीं है (यह धीमा है)। – gotqn