كيفية تفريغ جميع الصور لدينا من حقل VARBINARY (MAX) في SQL Server 2008 لنظام الملفات؟
-
03-07-2019 - |
سؤال
ولدي الجدول الذي يحتوي على الحقل IDENTITY
وحقل VARBINARY(MAX)
في ذلك. هل هناك أي طريقة يمكن تفريغ محتويات كل حقل VARBINARY(MAX)
إلى <م> الملفات م> (على سبيل المثال. c:\temp\images
)؟
الجدول المخطط:
PhotoId INTEGER NOT NULL IDENTITY
Image VARBINARY(MAX) NOT NULL
DateCreated SMALLDATETIME
إخراج:
c:\temp\images\1.png
c:\temp\images\2.png
c:\temp\images\3.png
... etc...
ما هي أفضل طريقة لمعالجة هذا؟
المحلول
ولقد حظيت بها بفضل هذا المنصب ...
SET NOCOUNT ON
DECLARE @IdThumbnail INTEGER,
@MimeType VARCHAR(100),
@FileName VARCHAR(200),
@Sqlstmt varchar(4000)
DECLARE Cursor_Image CURSOR FOR
SELECT a.IdThumbnail
FROM tblThumbnail a
ORDER BY a.IdThumbnail
OPEN Cursor_Image
FETCH NEXT FROM Cursor_Image INTO @IdThumbnail
WHILE @@FETCH_STATUS = 0
BEGIN
-- Generate the file name based upon the ID and the MIMETYPE.
SELECT @FileName = LTRIM(STR(@IdThumbnail)) + '.png'
-- Framing DynamicSQL for XP_CMDshell
SET @Sqlstmt='BCP "SELECT OriginalImage
FROM Appian.dbo.tblThumbnail
WHERE IdThumbnail = ' + LTRIM(STR(@IdThumbnail)) +
'" QUERYOUT c:\Temp\Images\' + LTRIM(@FileName) +
' -T -fC:\Temp\ImageFormatFile.txt'
print @FileName
print @sqlstmt
EXEC xp_cmdshell @sqlstmt
FETCH NEXT FROM Cursor_Image INTO @IdThumbnail
END
CLOSE Cursor_Image
DEALLOCATE Cursor_Image
تجدر الإشارة -> ش بحاجة إلى تنسيق ملف، للأمر BCP. هذا هو مضمون الملف ولقد وضعه في c: \ درجة الحرارة (كما هو موضح في سطر الأوامر BCP أعلاه)
10.0
1
1 SQLIMAGE 0 0 "" 1 OriginalImage ""
وملاحظة أخيرة حول هذا الملف شكل .. يجب أن يكون هناك سطر جديد بعد السطر الأخير. إلا ش سوف تحصل على خطأ.
واستمتع!
نصائح أخرى
وأسهل (بالنسبة لي) سيكون لكتابة تطبيق. NET القليل الذي ملقاة حقول ثنائي متغير إلى ملف.
إذا يعارضون لك العمل في .NET، ثم يجب عليك (لقد لم تختبر هذا) تكون قادرة على إنشاء عمود جديد من نوع "VARBINARY (MAX) FILESTREAM". تأكد لديك أيضا العمود المقابل "ROWGUIDCOL". ثم يمكنك (نظريا) تفعل شيئا مثل:
والجدول UPDATE SET varfilestream_col = varbinary_col
وعلى أمل أن يعمل ليا.