تمرير البيانات الثنائية إلى إجراء مخزن في SQL Server 2008
-
20-09-2019 - |
سؤال
أحاول معرفة طريقة لتخزين الملفات في قاعدة البيانات الخاصة بنا.أنا أعلم أنه أوصى إلى تخزين الملفات على نظام الملفات بدلا من قاعدة البيانات ، لكن العمل انا اعمل على أن غاية يفضلون استخدام قاعدة البيانات لتخزين هذه الصور (ملفات).
هناك أيضا بعض القيود.أنا لست المشرف المستخدم ، يجب أن تجعل الإجراءات المخزنة لتنفيذ جميع الأوامر.هذا لم يكن من صعوبة كبيرة حتى الآن ، ولكن لا حياة لي إنشاء طريقة لتخزين الملف (الصورة) في قاعدة البيانات.
عند محاولة استخدام معظم الأوامر ، أحصل على رسالة خطأ تقول "ليس لديك إذن لاستخدام التحميل بالجملة البيان". معظم المرافق يبدو مثل طريقة سهلة لتحميل الملفات إلى قاعدة البيانات ، ولكن من دون أذونات علي الرقم العمل-a-جولة.
قررت استخدام نموذج HTML مع ملف التحميل نوع الإدخال و التعامل مع PHP.PHP المكالمات الإجراء المخزن و يمر في محتويات الملف.المشكلة الآن أن يقول أن أقصى طول من المعلمة يمكن أن يكون إلا 128 حرفا.
الآن أنا عالقة تماما.لا يكون لديك أذونات لاستخدام معظم الأوامر و يبدو أن أقصى طول من المعلمة التي لا يمكن أن تمر إلى SP 128 حرفا.
كنت أتوقع أن واجهت مشاكل بسبب الثنائية أحرف ascii لا تخلط معا جيدا, ولكن أنا في طريق مسدود...
شكرا
المحلول
هنا هو مثال وجدت في ديفيد هايدن بلوق.
إنها c# على سبيل المثال ، ولكن يجب أن تكون خطوات مماثلة في PHP:
- تحويل الملف الذي تم تحميله إلى صفيف بايت
- تنفيذ tsql ضمن ديناميكية على الملقم
نصائح أخرى
وبشكل عام، فإننا لا تمر البيانات الثنائية في SQL. نحن تحميل الملف إلى الخادم، ثم تحميل الصورة من خادم إلى قاعدة البيانات.
وتحميل الصور إلى قاعدة البيانات من ملف:
UPDATE images
SET image = LOAD_FILE('images/myimage.jpg')
WHERE image_id = 1234
والحصول على الجزء الخلفي صورة إلى ملف:
SELECT image
INTO DUMPFILE 'images/myimage.jpg'
FROM images
WHERE image_id = 1234