2016-02-28 43 views
0

數據庫表有一個圖像存儲爲image字段 - 我能夠從數據庫拉這個圖像,即作爲一個變量存儲過程拉或我必須使用的東西像水晶報表?發送圖像存儲在電子郵件正文中的圖像字段sp_dbsend_mail

我想包括在指稱發送,但不能確定是否可以電子郵件 - 現在想要完整的解決方案,如果可能只是一些在正確的方向

「指向明確 -
我有一個選擇查詢是通過光標運行並在交付完成後向客戶發送電子郵件,每5分鐘運行一次 - 我可以擴展查詢以包含我已經找到的圖像列但是我不確定如何將其顯示爲圖像在電子郵件正文(圖像是捕獲的簽名),這是直接在服務器上運行,如果更容易作爲附件發送的圖像是好的 - 「

在此先感謝

保羅

+5

**爲什麼**你在**字符串**('varchar')列中存儲圖像(二進制數據)?沒有任何意義。如果你有**二進制**數據 - 使用像** VARBINARY()這樣的**二進制**列類型! –

+3

將圖像存儲在'varchar'中的問題在於,這不是真正的二進制表示,而是取決於所使用的排序規則。任何二進制數據應該總是以二進制格式之一存儲,例如, 'varbinary'(或'image'用於真正的舊SQL Server版本)。 – Lucero

+0

爲防萬一它從最後兩個註釋中不清楚 - 你的二進制數據幾乎可以肯定是由於代碼頁更改以適應'VARCHAR'格式而被破壞的,而且很難轉換回'VARBINARY' /'IMAGE'沒有數據丟失(和一個無效的圖像)。 –

回答

0

所以我最終得到了這個排序,並與我的其他代碼一起工作 - 最終能夠通過光標導出,並在完成刪除文件夾內容時 - 而dbsendmail添加了附件,我也能夠嵌入到電子郵件的正文 - 代碼如下,任何有興趣的人! - 我知道它遠非完美,所以任何幫助清理是讚賞 - 真正的新手警報!希望它是有道理的,我想要做的 - @TT感謝你的努力,併爲此感到遺憾 - 不清楚 - b - 不清楚 - c - blah blah !!! - BR Paul

DECLARE @IMG_PATH VARBINARY(MAX), 
@TIMESTAMP VARCHAR(MAX), 
@ObjectToken INT, 
@MYdtDate NVARCHAR(50), 
@MYemail NVARCHAR(50), 
@MYszBlockCapitols NVARCHAR(50), 
@MYdwJobnumber NVARCHAR(50), 
@MYszDelpostCode NVARCHAR(50), 
@MYszDelAddrName NVARCHAR(50), 
@MYszJobOrderNum NVARCHAR(50), 
@MYszDelAddr4 NVARCHAR(50), 
@MYszAccCode NVARCHAR(20), 
@MYdtTime NVARCHAR(10), 
@body NVARCHAR(4000) 



DECLARE C1 CURSOR READ_ONLY 
FOR 
SELECT ISNULL(JobItem.dwJobNumber,' '), ISNULL(JobItem.szDelAddrName,' '), ISNULL(JobItem.szDelPostCode,' '), ISNULL(Signature.szBlockCapitols,' '), ISNULL(StirlingManager_Comp1.dbo.SalesAccounts.szReportText8,' '), Convert(varchar,Signature.dtDate,103) AS Date, Convert(varchar,Signature.dtDate,108)as Time, ISNULL(JobItem.szJobOrderNum,' '), ISNULL(JobItem.szDelAddr4,' '), ISNULL(JobItem.szAccCode,' '), ISNULL(dms_document.data,' ') 
FROM   Transport_Comp1.dbo.JobItem INNER JOIN 
         Transport_Comp1.dbo.dms_document ON JobItem.dwJobItemId = dms_document.dwJobItemId LEFT OUTER JOIN 
         Transport_Comp1.dbo.Signature ON dms_document.id = Signature.dwDocumentIdFK LEFT OUTER JOIN 
         DocArchive_Comp1.dbo.dms_document AS dms_document_1 ON dms_document.id = dms_document_1.id LEFT OUTER JOIN 
         StirlingManager_Comp1.dbo.SalesAccounts ON JobItem.szAccCode = StirlingManager_Comp1.dbo.SalesAccounts.szAccountCode 
WHERE  (Signature.dtDate > DATEADD(MINUTE, -800, GETUTCDATE())) AND (Signature.dtDate < DATEADD(SECOND, -0.001, GETUTCDATE())) AND (Signature.bArrived = 0) AND (StirlingManager_Comp1.dbo.SalesAccounts.szReportText8 > '') 
OPEN C1 

FETCH NEXT FROM C1 INTO 
@MYdwJobnumber, @MYszDelAddrName, @MYszDelPostCode, @MYszBlockCapitols, @MYemail, @MYdtDate, @MYdtTime,@MYszJobOrderNum, @MYszDelAddr4, @MYszAccCode, @IMG_PATH 
WHILE (@@FETCH_STATUS = 0) 
BEGIN 
     SET @TIMESTAMP = 'd:\Signatures-TMP\' + @MYdwJobnumber + '.bmp' 
     EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT 
     EXEC sp_OASetProperty @ObjectToken, 'Type', 1 
     EXEC sp_OAMethod @ObjectToken, 'Open' 
     EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH 
     EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @TIMESTAMP, 2 
     EXEC sp_OAMethod @ObjectToken, 'Close' 
     EXEC sp_OADestroy @ObjectToken 


SET @body='<html><body><p><img src="http://www.mycompany.co.uk/wp-content/uploads/2013/12/mycompany.png" alt="" align="left"></p> 
<br><br><br> 
<p><span style="font-size: 9px; font-family: Verdana, Geneva, sans-serif; color: #0d3172;"><strong>My Company<br><span style="Century Gothic;">My Company address</span></span></p> 
<br><br></strong> 
<h1><span style="font-size: x-large; font-family: arial, helvetica, sans-serif; color: #0d3172;">DELIVERY CONFIRMATION</span></h1> 
<br> 
<table style="border: 2px double #0d3172; color: #0d3172; font-size: 12pt; font-family: arial, helvetica, sans-serif; width: 800px;" border="1" cellspacing="0" cellpadding="4"> 
    <tbody> 
    <tr> 
     <td><span style="font-size: small;">YOUR REFERENCE</span></td> 
     <td width="590"><span style="font-size: small;"><strong>' + @MYszJobOrderNum + '</strong></span></td> 
    </tr> 
    <tr> 
     <td><span style="font-size: small;">DELIVERY TO</span></td> 
     <td><span style="font-size: small;"><strong>' + @MYszDelAddrName + '</strong></span></td> 
    </tr> 
    <tr> 
     <td><span style="font-size: small;">TOWN</span></td> 
     <td><span style="font-size: small;"><strong>' + @MYszDelAddr4 + '</strong></span></td> 
    </tr> 
    <tr> 
     <td><span style="font-size: small;">POSTCODE</span></td> 
     <td><span style="font-size: small;"><strong>' + @MYszDelPostCode + '</strong></span></td> 
    </tr> 
    <tr> 
     <td><span style="font-size: small;">DELIVERY DATE</span></td> 
     <td><span style="font-size: small;"><strong>' + @MYdtDate + '</strong></span></td> 
    </tr> 
    <tr> 
     <td><span style="font-size: small;">DELIVERY TIME</span></td> 
     <td><span style="font-size: small;"><strong>' + @MYdtTime + '</strong></span></td> 
    </tr> 
    <tr> 
     <td><span style="font-size: small;">SIGNED FOR BY</span></td> 
     <td><span style="font-size: small;"><strong>' + @MYszBlockCapitols + '</strong></span></td> 
    </tr> 
    <tr> 
     <td><span style="font-size: small;">YOUR ACCOUNT CODE</span></td> 
     <td><span style="font-size: small;"><strong>' + @MYszAccCode + '</strong></span></td> 
    </tr> 
    <tr> 
     <td><span style="font-size: small;">OUR JOB NUMBER</span></td> 
     <td><span style="font-size: small;"><strong>' + @MYdwJobnumber + '</strong></span></td> 
    </tr> 
    </tbody> 
</table> 
<br><br> 

<p><span style="font-size: 12px; font-family: Verdana, Geneva, sans-serif; color: #0d3172;"><strong>DIGITAL SIGNATURE</p></strong></span> 
<img src="cid:'+ @MydwJobNumber + '.bmp" /><p></p> 

<p><span style="font-size: 12px; font-family: Verdana, Geneva, sans-serif; color: #0d3172;"><strong>Please contact our Customer Services Team if you have any questions or queries.</span></strong></span></p></body> 
</html>' 
       EXEC msdb.dbo.sp_send_dbmail 
       @profile_name = 'SQL_Email', 
       @recipients = @MYemail, 
       @subject = 'EMAIL POD',    
       @file_attachments = @TIMESTAMP, 
       @[email protected], 
       @body_format = 'HTML'; 
       print @body;  

     FETCH NEXT FROM C1 INTO 
@MYdwJobnumber, @MYszDelAddrName, @MYszDelPostCode, @MYszBlockCapitols, @MYemail, @MYdtDate, @MYdtTime,@MYszJobOrderNum, @MYszDelAddr4, @MYszAccCode, @IMG_PATH 
END 
EXEC xp_cmdshell 'del D:\Signatures-TMP\*.bmp' 
CLOSE C1 
DEALLOCATE C1 
0

看看在sp_send_dbmail的文檔,具體參數如下:


[@query =] '查詢'

是一個查詢執行。查詢的結果可以附加爲文件,或者包含在電子郵件正文中。查詢的類型爲nvarchar(max),並且可以包含任何有效的Transact-SQL語句。請注意,查詢是在單獨的會話中執行的,因此調用sp_send_dbmail的腳本中的本地變量對查詢不可用。


[@execute_query_database =] 'execute_query_database'

是在其內存儲的程序運行查詢數據庫上下文。該參數是sysname類型的,具有當前數據庫的缺省值。該參數僅適用於指定了@query的情況。


[@attach_query_result_as_file =] attach_query_result_as_file

指定結果集的查詢是否被返回作爲附加文件。 attach_query_result_as_file是類型位,默認值爲0.

當值爲0時,查詢結果將包含在電子郵件正文中,位於@body參數的內容之後。值爲1時,結果將作爲附件返回。該參數僅適用於指定了@query的情況。


[@query_attachment_filename =] query_attachment_filename

指定用於所述查詢結果集附件的文件名稱。 query_attachment_filename的類型爲nvarchar(255),缺省值爲NULL。當attach_query_result爲0時,此參數將被忽略。當attach_query_result爲1且此參數爲NULL時,Database Mail會創建一個任意的文件名。


所以進行查詢選擇適當的圖像,並將其傳遞到@query參數。爲其他參數設置適當的值。查看文檔中是否有其他查詢參數適用於您的案例。

+0

如果只是這麼簡單! – PaulyboyUK

+0

@PaulyboyUK你可以用這種方式作爲附件發送圖像。這不是你可以使用的東西嗎? –

+0

是的,我試過,發佈前它只是附加一個垃圾文件 - 不是圖像 – PaulyboyUK

相關問題