2008-11-07 17 views
5

में शुद्ध SQL के साथ डेटाबेस के बीच BLOB मानों की प्रतिलिपि बनाना मुझे किसी SQL सर्वर 2005 डेटाबेस से कुछ BLOB डेटा खींचने और किसी अन्य सर्वर में किसी अन्य डेटाबेस में एक ही डेटा डालने के लिए SQL स्क्रिप्ट उत्पन्न करने की आवश्यकता है।SQL सर्वर

मुझे केवल SQL स्क्रिप्ट का उपयोग करके ऐसा करने की अनुमति है, मैं किसी अन्य उपयोगिता का उपयोग नहीं कर सकता या जावा या .NET में प्रोग्राम लिख सकता हूं।

मेरे पास अन्य बड़े प्रतिबंध यह है कि जब मैं स्क्रिप्ट चलाता हूं, तो मुझे मूल डेटाबेस तक पहुंच नहीं है (बीएलओबी डेटा को लक्षित डेटाबेस में कॉपी करने के लिए, इसलिए डेटा चाहिए एसक्यूएल स्क्रिप्ट फ़ाइल के भीतर पहले ही एन्कोड किया जा सकता है।

सारांश: क्या बीएलओबी डेटा को टेक्स्ट में एन्कोड करने का कोई तरीका है ताकि मैं इसे एक स्क्रिप्ट टेक्स्ट फ़ाइल में SQL INSERT कमांड में डंप कर इसे चला सकूं?

मैं आवश्यक होने पर विशेष टी-एसक्यूएल स्टेटमेंट और संग्रहीत प्रक्रियाओं को चलाने में सक्षम हूं।

उत्तर

2

TEXTCOPY एक नमूना एसक्यूएल सर्वर में एसक्यूएल सर्वर 7.0 और 2000 में शामिल आवेदन लेकिन अब उपलब्ध नहीं था 2005

हालांकि, SQL सर्वर 2005 में TEXTCOPY लिए googling, मैं इस विकल्प है कि चाल कर सकता पाया:

http://sequelserver.blogspot.com/2007/01/texcopy-sql-server-2005.html

यह लेखन पर निर्भर करता है और फाइल सिस्टम है, जो मेरे मामले में आदर्श नहीं है से बाइनरी डेटा पढ़ने (आदर्श मैं SQL स्क्रिप्ट पाठ फ़ाइल के साथ ही बाइनरी डेटा सांकेतिक शब्दों में बदलना चाहते हैं), लेकिन यह है अब तक का सबसे अच्छा मिला है।

यहाँ कैसे बल्क OPENROWSET का उपयोग कर बाइनरी आयात/निर्यात संचालन करने के लिए पर एक और अच्छा स्रोत है: http://msdn.microsoft.com/en-us/library/ms191184.aspx

1

यह लेख "Copy Text or Image into or out of SQL Server" मदद कर सकता है:

आप एक संग्रहीत प्रक्रिया में TEXTCOPY कमांड लाइन टूल को एकीकृत कर सकते हैं:

CREATE PROCEDURE sp_textcopy (
    @srvname  varchar (30), 
    @login  varchar (30), 
    @password varchar (30), 
    @dbname  varchar (30), 
    @tbname  varchar (30), 
    @colname  varchar (30), 
    @filename varchar (30), 
    @whereclause varchar (40), 
    @direction char(1)) 

AS 

DECLARE @exec_str varchar (255) 
SELECT @exec_str = 
     'textcopy /S ' + @srvname + 
     ' /U ' + @login + 
     ' /P ' + @password + 
     ' /D ' + @dbname + 
     ' /T ' + @tbname + 
     ' /C ' + @colname + 
     ' /W "' + @whereclause + 
     '" /F ' + @filename + 
     ' /' + @direction 
EXEC master..xp_cmdshell @exec_str 

आप बदलना होगा/यह करने के क्रम में एक छोटे से विस्तार बनाई गई फ़ाइल को अन्य डेटाबेस में पढ़ें।

Vinko इस उत्तर की टिप्पणी में लिखते हैं, ध्यान रखें कि सतह सतह विन्यास में xp_cmdshell को सक्षम करने की आवश्यकता है। TEXTCOPY की

विवरण:

प्रतियां एक भी पाठ या में या SQL सर्वर से बाहर छवि मूल्य। मान एक पंक्ति का निर्दिष्ट टेक्स्ट या छवि 'कॉलम' है (निर्दिष्ट 'तालिका' के "जहां खंड") द्वारा निर्दिष्ट किया गया है।

दिशा में (/ आई) है तो निर्दिष्ट 'फ़ाइल' से डेटा एसक्यूएल सर्वर में बनाई जाए, मौजूदा पाठ या छवि मूल्य की जगह। यदि दिशा आउट (/ O) है तो टेक्स्ट या छवि मान को SQL सर्वर से निर्दिष्ट 'फ़ाइल' में कॉपी किया गया है, जो किसी मौजूदा फ़ाइल को प्रतिस्थापित करता है।

+0

यह आपके उत्तर के लिए धन्यवाद –

+0

सतह क्षेत्र विन्यास में xp_cmdshell को सक्षम करने की आवश्यकता है, लेकिन अगर मैं * textcopy * उपयोगिता की पहुंच है मुझे यकीन है कि नहीं हूँ। एक शुद्ध एसक्यूएल आधारित समाधान वास्तव में मैं क्या देख रहा था। – Dema

0

इस सवाल पर एक नजर डालें और पृष्ठ पर BCP के लिए खोज - दोनों आयात और varbinary के लिए निर्यात का उदाहरण दिया गया है (अधिकतम) (जो ऐसे कॉलम के लिए नया मानक प्रकार है)। आप निर्यात के लिए मनमानी क्वेरी चला सकते हैं।

How to insert a blob into a database using sql server management studio