sp_send_dbmail संग्रहीत कार्यविधि अनुलग्नक के साथ भेजें


13

मुझे अपने एक ग्राहक के लिए एक छोटी मासिक रिपोर्ट भेजने का काम सौंपा गया है। रिपोर्ट को पूर्व में मैन्युअल रूप से चलाया गया है, आउटपुट को एक स्प्रेडशीट में कॉपी किया गया है और ग्राहक को अटैचमेंट के रूप में भेजा गया है।

मैं एक अधिक स्थायी समाधान की तलाश कर रहा हूं, इसलिए मैं sp_send_dbmailक्वेरी को चलाने और अनुलग्नक के रूप में भेजने के लिए संग्रहीत कार्यविधि का उपयोग करने का इरादा रखता हूं ।

सब कुछ काम करता है लेकिन संदेश का स्वरूपण। प्रारंभ में मैंने CSV फ़ाइल के रूप में आउटपुट को संलग्न करने का प्रयास किया, @query_result_seperator = ','लेकिन परिणाम हर जगह थे!

जब मैं रिपोर्ट को सामान्य रूप से चलाता हूं, तो आउटपुट SQL में ठीक दिखता है। लेकिन इसे CSV के रूप में या केवल संदेश निकाय में भेजना नहीं है।

मुझे लगता है कि यह बेहतर हो सकता है अगर मैं HTML के रूप में आउटपुट निर्यात करता हूं और इसे अनुलग्नक के रूप में या XML के रूप में भेजता हूं, लेकिन मुझे नहीं पता कि यह कैसे करना है।

क्या किसी के पास कोई सुझाव है?

अग्रिम में धन्यवाद!

जवाबों:


11

यदि आपको अभी भी फ़ाइल को निर्यात करने और अनुलग्नक के रूप में भेजने की आवश्यकता है, तो यह SQL सर्वर में पूरी तरह से स्वचालित भी हो सकता है।

CSV के रूप में निर्यात BCP के माध्यम से प्राप्त किया जा सकता है । इस उत्तर में अधिक विवरण हैं , लेकिन मुख्य विचार यह है:

bcp "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable" queryout "D:\MyTable.csv" -c -t , -S SERVERNAME -T

फिर आप ईमेल में फ़ाइल संलग्न करेंगे sp_send_dbmail

USE msdb;
GO

EXEC sp_send_dbmail 
  @recipients='mark@mark.com',
  @subject='Client Report',
  @body='Please find your latest report attached',
  @file_attachments='D:\MyTable.csv';

यदि आप चाहें, तो एक ईमेल में कई फाइलें संलग्न कर सकते हैं


8

हाँ आप HTML प्रारूप के माध्यम से रिपोर्ट भेज सकते हैं, उदाहरण के लिए MS में सूचीबद्ध:

परिदृश्य: यह उदाहरण ई-मेल पते danw@Advt-Works.com का उपयोग करके डैन विल्सन को एक ई-मेल संदेश भेजता है। इस संदेश में विषय वर्क ऑर्डर सूची है, और इसमें एक HTML दस्तावेज़ शामिल है जो 30 अप्रैल, 2004 के बाद दो दिन से कम समय के साथ कार्य आदेश दिखाता है। डेटाबेस मेल HTML प्रारूप में संदेश भेजता है।

DECLARE @tableHTML  NVARCHAR(MAX) ;

SET @tableHTML =
    N'<H1>Work Order Report</H1>' +
    N'<table border="1">' +
    N'<tr><th>Work Order ID</th><th>Product ID</th>' +
    N'<th>Name</th><th>Order Qty</th><th>Due Date</th>' +
    N'<th>Expected Revenue</th></tr>' +
    CAST ( ( SELECT td = wo.WorkOrderID,       '',
                    td = p.ProductID, '',
                    td = p.Name, '',
                    td = wo.OrderQty, '',
                    td = wo.DueDate, '',
                    td = (p.ListPrice - p.StandardCost) * wo.OrderQty
              FROM AdventureWorks2008R2.Production.WorkOrder as wo
              JOIN AdventureWorks2008R2.Production.Product AS p
              ON wo.ProductID = p.ProductID
              WHERE DueDate > '2006-04-30'
                AND DATEDIFF(dd, '2006-04-30', DueDate) < 2 
              ORDER BY DueDate ASC,
                       (p.ListPrice - p.StandardCost) * wo.OrderQty DESC
              FOR XML PATH('tr'), TYPE 
    ) AS NVARCHAR(MAX) ) +
    N'</table>' ;

EXEC msdb.dbo.sp_send_dbmail @recipients='danw@Adventure-Works.com',
    @subject = 'Work Order List',
    @body = @tableHTML,
    @body_format = 'HTML' ;

इसके अलावा, आप SSIS स्क्रिप्ट टास्क का उपयोग करके SQL सर्वर में पढ़े गए HTML स्वरूपित ईमेल का उपयोग कर सकते हैं

साथ ही, यदि आप HTML रिपोर्ट को शेड्यूल करना चाहते हैं तो यहां पढ़ें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.