كيفية تفريغ جميع الصور لدينا من حقل VARBINARY (MAX) في SQL Server 2008 لنظام الملفات؟

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

سؤال

ولدي الجدول الذي يحتوي على الحقل 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

وعلى أمل أن يعمل ليا.

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