sql – 从图像列预览数据最简单的方法是什么?

前端之家收集整理的这篇文章主要介绍了sql – 从图像列预览数据最简单的方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些列的图像数据类型,我想预览(或浏览)这些表中的数据.当我使用sql Server Management Studio中选择前1000行时,图像列的值以十六进制显示.预览这些图像最简单的方法是什么,因为十六进制值对我没有用?

PS:数据库不在我的控制之下,所以改变数据类型不是一个选择.

解决方法

我会写一个proc(或查询;见下文)将二进制文件导出到文件系统,然后使用任何旧的现成的照片管理实用程序(即Windows Photo Viewer)来查看内部的内容.

如果您的文件命名中的聪明人,您可以在名称中为每个图像提供足够的信息,以便在视觉上找到所需的内容后,再次在数据库中重新找到它.

这是一个将二进制文件导出到文件系统的进程.我修改this sample code.它是未经测试,但应该非常接近的概念.它使用BCP导出您的二进制文件.在这里查看full docs on the BCP utility.

该过程还使您能够导出表中的所有内容,或仅基于传递的主键单个行.它使用一个游标(yuck),以及一些动态的sql(yuck,yuck),但有时你必须做你应该做的.

CREATE PROCEDURE ExportMyImageFiles
 (   
   @PriKey INT,@OutputFilePath VARCHAR(500)
 ) 
 AS 
 BEGIN 
     DECLARE @sql VARCHAR(8000) 

     IF @PriKey IS NULL /* export all images */
     BEGIN
        DECLARE curExportBinaryImgs CURSOR FAST_FORWARD FOR

        SELECT 'BCP "SELECT MyImage FROM [dbo].[MyTable] 
           WHERE PrimaryKey =' + CAST(PrimaryKey AS VARCHAR(25)) + 
           '" queryout ' + @OutputFilePath + MyImageName + '.' + 
           MyImageType + ' -S MyServer\MyInstance -T -fC:\Documents.fmt'
        FROM [dbo].[MyTable]

        OPEN curExportBinaryImgs
        FETCH NEXT FROM curExportBinaryImgs INTO @sql

        WHILE @@FETCH_STATUS = 0
        BEGIN            
            EXEC xp_cmdshell @sql,NO_OUTPUT
            FETCH NEXT FROM curExportBinaryImgs INTO @sql
        END

        CLOSE curExportBinaryImgs
        DEALLOCATE curExportBinaryImgs
     END
     ELSE       /* Export only the primary key provided */     
     BEGIN
        SELECT @sql = 'BCP "SELECT MyImage FROM [dbo].[MyTable] 
        WHERE PrimaryKey =' + CAST(PrimaryKey AS VARCHAR(25)) + 
            '" queryout ' + @OutputFilePath
            + MyImageName + '.' + MyImageType + 
            ' -S MyServer\MyInstance -T -fC:\Documents.fmt'
        FROM [dbo].[MyTable]
        WHERE PrimaryKey = @PriKey

        EXEC xp_cmdshell @sql,NO_OUTPUT
     END 
 END

这当然是假设您的图像列中存储的内容实际上是一个图像,而不是其他文件类型.希望如果它是一个图像,你也知道类型,bmp,jpg,png,gif等

如果你不想要这样一个完整的过程尝试单个查询的麻烦或可重用性:

DECLARE @OutputFilePath VarChar(500) = /* put output dir here */

    DECLARE @sql VARCHAR(8000)
    DECLARE curExportBinaryImgs CURSOR FAST_FORWARD FOR
    SELECT 'BCP "SELECT MyImage FROM [dbo].[MyTable] 
       WHERE PrimaryKey =' + CAST(PrimaryKey AS VARCHAR(25)) + 
       '" queryout ' + @OutputFilePath + MyImageName + '.' + 
       MyImageType + ' -S MyServer\MyInstance -T -fC:\Documents.fmt'
    FROM [dbo].[MyTable]

    OPEN curExportBinaryImgs
    FETCH NEXT FROM curExportBinaryImgs INTO @sql

    WHILE @@FETCH_STATUS = 0
    BEGIN            
        EXEC xp_cmdshell @sql,NO_OUTPUT
        FETCH NEXT FROM curExportBinaryImgs INTO @sql
    END

    CLOSE curExportBinaryImgs
    DEALLOCATE curExportBinaryImgs
原文链接:https://www.f2er.com/mssql/82917.html

猜你在找的MsSQL相关文章