如何使用SQL将映像从SQL Server保存到文件

Cra*_* HB 7 sql sql-server email image

在SQL Server 2005中,我有一个包含图像的表(数据类型:图像).仅使用SQL,如何将图像另存为文件(在运行SQL Server的同一服务器上).如果必须,我将使用SQL CLR,但我想尽可能避免这种情况.

背景

我希望SQL Server作业不运行调用proc的调度,该调度将使用SQL Server数据库邮件发送带有嵌入式图像的电子邮件,如下所示:

exec msdb.dbo.sp_send_dbmail
@profile_name = 'MyProfile',
@recipients = 'bob@hotmail.com',
@subject = 'hello',
@file_attachments = 'C:\MyLogo.gif',
@body=N'<p>Image Test</p><img src="MyLogo.gif" /><p>See image there?</p>', 
@body_format = 'HTML';
Run Code Online (Sandbox Code Playgroud)

该SQL有效,但我需要先将图像保存为文件.如果我可以直接在电子邮件上获取图像而不将其保存为文件,那很好,但它需要嵌入到电子邮件中,我只想使用SQL.

duc*_*rth 5

我已经尝试使用@attach_query_result_as_file选项但是没有办法将该查询写成二进制文件,我可以开始工作.因此,下一个选项是将bcp用于临时文件,然后附加该文件.

DECLARE @sql VARCHAR(1000)

SET @sql = 'BCP "SELECT ImageColumn FROM YourTable where id = 1 " QUERYOUT C:\TEMP\MyLogo.gif -T -fC:\TEMP\bcpFormat.fmt -S ' + @@SERVERNAME
EXEC master.dbo.xp_CmdShell @sql

exec msdb.dbo.sp_send_dbmail
@profile_name = 'MyProfile',
@recipients = 'bob@hotmail.com',
@subject = 'test as image',
@body=N'<p>Image Test</p><img src="MyLogo.gif" /><p>See image there?</p>', 
@file_attachments = 'C:\TEMP\MyLogo.gif',
@body_format = 'HTML';
Run Code Online (Sandbox Code Playgroud)

bcpFormat.fmt看起来像这样:

8.0
1
1 SQLIMAGE 0 0 "" 1 Image ""
Run Code Online (Sandbox Code Playgroud)

这会将数据库中的图像作为文件附加到电子邮件中.它仍然不会显示它"内联",因为需要更多的工作来将图像编码到电子邮件的正文中并从您的html引用它.您还需要为文件和清理生成一些唯一的名称,以便多个进程不会相互踩踏.