نسخ قيم BLOB بين قواعد البيانات باستخدام SQL خالص في SQL Server

StackOverflow https://stackoverflow.com/questions/271979

سؤال

أحتاج إلى سحب بعض بيانات BLOB من قاعدة بيانات SQL Server 2005 وإنشاء برنامج نصي SQL لإدراج هذه البيانات نفسها في قاعدة بيانات أخرى، في خادم آخر.

يُسمح لي فقط بالقيام بذلك باستخدام نصوص SQL النصية، ولا يمكنني استخدام أي أداة مساعدة أخرى أو كتابة برنامج بلغة Java أو .NET للقيام بذلك.

القيد الكبير الآخر الذي أطبقه هو أنه لا يمكنني الوصول إلى قاعدة البيانات الأصلية (حيث توجد بيانات BLOB الأصلية) عندما أقوم بتشغيل البرنامج النصي، لنسخ بيانات BLOB إلى قاعدة البيانات الهدف، لذلك يجب أن تكون البيانات مشفرة بالفعل داخل ملف البرنامج النصي SQL.

تلخيص لما سبق:هل هناك طريقة لترميز بيانات BLOB في نص حتى أتمكن من تفريغها في أمر SQL INSERT داخل ملف نصي وتشغيله؟

أنا قادر على تشغيل عبارات T-SQL الخاصة والإجراءات المخزنة إذا لزم الأمر.

هل كانت مفيدة؟

المحلول

وكان TEXTCOPY تطبيق نموذج المدرجة في SQL Server 7.0 و 2000 لكنها لم تعد متوفرة في SQL Server 2005.

ومع ذلك، غوغلينغ لTEXTCOPY في SQL Server 2005، لقد وجدت هذا البديل الذي قد تفعل خدعة:

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

وإنما تعتمد على كتابة وقراءة البيانات الثنائية من نظام الملفات التي في حالتي ليست مثالية (مثالي أود أن ترميز البيانات الثنائية مع SQL النصي ملف النص نفسه)، ولكن هذا هو أفضل وجدتها حتى الآن.

وهنا مصدر جيد آخر حول كيفية القيام بعمليات الاستيراد / التصدير ثنائية باستخدام OPENROWSET BULK: http://msdn.microsoft.com/en-us/library/ms191184. ASPX

نصائح أخرى

هذا المقال "نسخ النص أو الصورة إلى أو خارج 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

سيتعين عليك تغييره/توسيعه قليلاً حتى تتمكن من قراءة الملف الذي تم إنشاؤه في قاعدة البيانات الأخرى.

مثل فينكو يكتب في التعليق على هذه الإجابة، ضع في اعتبارك أن هذا يتطلب تمكين xp_cmdshell في تكوين مساحة السطح.

وصف النص:

نسخ قيمة نصية أو صورة واحدة إلى SQL Server أو خارجه.القيمة هي نص محدد أو صورة "عمود" لصف واحد (محدد بواسطة "WHERE CHELAUSE") للجدول المحدد.

إذا كان الاتجاه في (/i) ، فسيتم نسخ البيانات من "الملف" المحدد إلى SQL Server ، واستبدال النص الموجود أو قيمة الصورة.إذا كان الاتجاه خارج (/س) ، فسيتم نسخ النص أو قيمة الصورة من SQL Server إلى "الملف" المحدد ، واستبدال أي ملف موجود.

ونلقي نظرة على هذا السؤال والبحث عن BCP على الصفحة - لديها سبيل المثال كل من الاستيراد والتصدير لثنائي متغير (الحد الأقصى) (والذي هو نوع قياسي جديد لهذه الأعمدة). يمكنك تشغيل الاستعلام التعسفي للتصدير.

كيفية إدراج فقاعة في قاعدة بيانات باستخدام SQL Server إدارة الاستوديو

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top