我有一些具有image
数据类型的列,我想预览(或浏览)那些表中的数据。Select top 1000 rows
在SQL Server
Management Studio中使用时,图像列的值以十六进制显示。因为十六进制值对我没有用,最简单的预览这些图像的方法是什么?
PS .:数据库不在我的控制之下,因此不能选择更改数据类型。
我将编写一个proc(或查询;请参见下文)以将二进制文件导出到文件系统中,然后使用任何旧的现成的照片管理实用程序 (即Windows Photo
Viewer)
来查看其中的内容。
如果您巧妙地命名文件,则可以在名称中为自己提供足够的信息,以便在视觉上找到要查找的内容后立即在数据库中再次找到它。
这是将二进制文件导出到文件系统的proc。我从此示例代码进行了修改。它未经测试,但在概念上应该非常接近。它使用BCP导出二进制文件。在此处查看有关BCP实用程序的完整文档。
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
问题内容: 在Java中,数组不会覆盖toString(),因此,如果您尝试直接打印一个数组,则得到数组的十六进制,如下所示: 但是通常情况下,我们实际上会想要更多类似的东西。最简单的方法是什么?以下是一些示例输入和输出: 问题答案: 从Java 5开始,您可以;然后将或用于数组中的数组。请注意,版本调用数组中的每个对象。输出甚至以您要求的确切方式修饰。 例子: 简单数组: 输出: 嵌套数组: 输
问题内容: 反转此ArrayList的最简单方法是什么? 问题答案: 示例(参考):
反转这个ArrayList的最简单方法是什么?
问题内容: 我想创建一个函数,例如: 可以给定文件和调整大小的位置。 当前函数的效果很好,只是在必要时不会裁剪。 如果给出的是矩形图像,并且需要调整正方形大小(宽度=高度),则必须进行一些中心加权的裁剪。 问题答案: 您需要在调整大小之前正确裁剪图像。基本思想是确定源图像的最大矩形区域,该区域的纵横比(宽高比)与缩略图图像相同,然后在调整为缩略图尺寸之前将其周围的任何多余部分修剪(裁剪)。这是一个
我已经启动并运行了AngularJS和web.api WAAD身份验证。对于客户端,我使用了很棒的库adal.js。对于后端,我使用Microsoft.OWIN.Security.OAuth。这部分进行得相当顺利。 现在我要实现基于角色的授权(将映射到WAAD组)。组不包括在身份验证令牌中,所以我必须向Azure Graph API请求它们。我看到了各种实现方法,例如使用自定义声明提供程序、向pr
问题内容: 每隔几周就会弹出一个奇怪的神秘数据损坏错误,而没人知道为什么。到目前为止,表上的主键似乎是自发更改的,因此指向该表的其他行现在被弄乱了。 尽管我仍在寻找造成这种情况的根本原因(无法进行复制),但我还是希望通过某种临时手段来防止列值不断变化。这是表模式: 我们当然需要能够创建新的行,但是无论运行什么奇怪的查询,我都想防止任何更改。 我能想到的一些想法: 我对Oracle的表权限不是很熟悉