gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:36:08 31 4
gpt4 key购买 nike

我有一些带有image数据类型的列,我想预览(或浏览)那些表中的数据。当我在SQL Server Management Studio中使用Select top 1000 rows时,图像列的值以十六进制显示。因为十六进制值对我没有用,最简单的预览这些图像的方法是什么?

PS .:数据库不在我的控制之下,因此不能选择更改数据类型。

最佳答案

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

如果您巧妙地命名文件,则可以在视觉上找到要查找的内容后,为名称中的每个图像提供足够的信息,以便迅速在数据库中再次找到它。

这是将二进制文件导出到文件系统的proc。我从this sample code修改。它未经测试,但在概念上应该非常接近。它使用BCP导出二进制文件。在此处查看full docs on the BCP utility

proc还使您能够导出表中的所有内容,或仅基于传递的主键导出一行。它使用游标(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

关于sql - 预览图像列中数据的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10454919/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com