簡體   English   中英

每月的每個第一天在SQL Server 2012上通過電子郵件通過電子郵件附件發送查詢結果

[英]Sending query results via email via email attachment every first day of every month on SQL Server 2012

我的要求:每個月的第一天通過電子郵件附件發送查詢結果。

我一直在手動進行的工作:

  • 我必須通過更改日期范圍在每月的每個第一天運行此查詢。
  • 然后,我導出以.csv格式獲取的結果,並將此csv文件作為附件發送

我需要您的建議,以幫助我實現該過程的自動化:

  • 我是否應該在SQL Server 2012上設置作業,但是可以,我必須修改日期范圍。

請提出前進的建議。

任何幫助,不勝感激。

如前所述,創建作業並將其安排為在每月的第一天運行。 考慮到您具有創造工作的足夠知識。

轉到作業屬性->時間表->進行以下設置

在此處輸入圖片說明

每1個月的第一天的12:00:00發生。 時間表將從2016年12月7日開始使用。

根據您的業務需求更改時間(應該在每月的第一天運行)。 可以在“ Daily frequency-> Occurs once at:下進行設置Daily frequency-> Occurs once at:

也可以使用Windows批處理文件以另一種方式使此過程自動化。您可以使用Windows調度程序對其進行調度。 以下是批處理文件的內容

Echo off
sqlcmd -u <username> -p <password> -S <server name> -d <database name> -i <sql file location> -o   <output result file location>

Powershell.exe -executionpolicy remotesigned -File   <location of powershell file>

運行bat文件時,powershell文件會觸發電子郵件。 Powershell文件的內容

$smtpserver = "<smtp server name>"
$from="mail id"
$to="<mail id"
$a = Get-Date
$subject= "<subject line> `r"+ $a.Month +"/"+$a.Day +"/"+ $a.Year
$body=""
$attachment="File location"   
Thanks,`n " 
$mailer = new-object Net.Mail.SMTPclient($smtpserver)
$msg = new-object Net.Mail.MailMessage($from,$to,$subject,$body,$data1,$a)
$msg.IsBodyHTML = $true
$mailer.send($msg)

我使用SQL Agent通過電子郵件發送結果,如下所示:

/*
First you should set up SQL Mail Profile.
Please change @dbName, @SQLscript, @mailbody and mail account values. When changing your @SQLscript value be careful that replace (with CTRL+H) single quota (') to double quotas ('').
*/
DECLARE @dbName nvarchar(50), @SQLscript nvarchar(4000), @subject varchar(100), @mailfrom varchar(100), @mailbody nvarchar(4000), @jobName varchar(100)
SELECT @jobName = name from msdb..sysjobs where job_id = $(ESCAPE_NONE(JOBID))
SELECT @mailfrom = @@SERVICENAME + ' <' + cast(SERVERPROPERTY('ComputerNamePhysicalNETBIOS') as varchar(50)) + '@domain.com>'
SELECT @subject = N'SQL Server Job Result [Job: ' + @jobName + ']'

SELECT @dbName = 'Database'
SELECT @SQLscript = '
INSERT INTO [Database].[Schema].[Table] (
  Column1
 ,Column2
 ) VALUES (
  ''Value1''
 ,''Value2'' ) 
'

SELECT @mailbody = N'
    Depending on case number 1234-5678-90 your script executed on <b>' + @@SERVERNAME + N'</b> instance and <b>' + @dbName + '</b> database. Script info and results are shown below. <br><br>' + 
    '<b>Script: </b><br>' + @SQLscript + '<br><br>' + 
    '<b>Result: </b><br>'

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'sqlmailprofile',
@recipients = '<mail1@domain.com>;<mail2@domain.com>',
@copy_recipients = '<mail3@domain.com>',
@from_address = @mailfrom,
@reply_to = '<mail3@domain.com>',
@subject = @subject,
@body = @mailbody,
@body_format = 'HTML',
@importance = 'HIGH',
@execute_query_database = @dbName,
@query = @SQLscript
/* If you want to send results with attached file:
@attach_query_result_as_file = 1,
@query_attachment_filename = 'script_output.csv',
@query_result_separator=@tab,
@query_result_width =32767,
@query_result_no_padding=1,
@exclude_query_output=1,
@query_result_header=1
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM