سؤال

هل من الممكن الاتصال بـ 7-ZIP من نص SQL؟ في الأساس أقوم باستخراج الجداول إلى CSV ثم تغليفها إلى ملفات 7Z. لقد قمت بتثبيت 7-ZIP على الجهاز حيث يتم تثبيت SQL Server وإضافته إلى المسار ، لكن هذا لا يكفي.

أحصل على الخطأ التالي عندما أحاول تشغيل البرنامج النصي باستخدام xp_cmdshell

'7z' is not recognized as an internal or external command,
operable program or batch file.

هذا هو الكود ، لقد أعلنت بالفعل المتغيرات

declare @archiveCommand nvarchar(max)
declare @filename nvarchar(max)

set @archiveCommand = '7z a '+@filename+'.7z '+@filename+' '
print @archiveCommand
EXEC master..xp_cmdshell @archiveCommand
هل كانت مفيدة؟

المحلول

من الممكن ، نعم ، ولكن ربما فكرة سيئة: غالبًا ما تكون الأذونات مشكلة (كما اكتشفت) ، فإن المسارات والأدلة العاملة ستقوم برحلة لك ، وبناء أوامر shell في SQL هو ألم. سيكون من الأسهل بكثير استخدام البرنامج النصي الخارجي ، وتشغيله من وظيفة مجدولة أو حزمة SSIS.

إذا قمت بتوضيح exaclty لماذا ومتى تريد تشغيل البرنامج النصي من SQL ، فقد يتمكن شخص ما من اقتراح نهج أفضل. أفعل نفس الشيء بالضبط باستخدام SSIS و Python ، على سبيل المثال.

نصائح أخرى

لا أعرف ما إذا كان هذا سيكون مفيدًا الآن ، لكنني صادفت هذه المشكلة وحلتها عن طريق الاتصال بتطبيق 7Z باسم الملف.

لذا بدلاً من:

set @archiveCommand = '7z a '+@filename+'.7z '+@filename+' '

كنت تريد:

set @archiveCommand = '"C:\Program Files\7-zip\7z" a '+@filename+'.7z '+@filename+' '

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