存储sql查询输出,并将其通过电子邮件发送到DL或特定的电子邮件ID

存储sql查询输出,并将其通过电子邮件发送到DL或特定的电子邮件ID,sql,sql-server,batch-file,Sql,Sql Server,Batch File,我想从.bat文件运行sql查询。我了解如何创建.bat文件和.sql文件,然后从.bat文件调用.sql文件。我的问题是如何将其输出存储在任何位置,然后发送到电子邮件 我现在的蝙蝠看起来像 osql -S <ServerName> -U <User Name> -P <Password> < mysqlfile.sql 感谢您的帮助。您可以设置SQL Server 2008数据库邮件,如图所示 然后,您可以通过电子邮件发送查询结果,如图所示,或者使用

我想从.bat文件运行sql查询。我了解如何创建.bat文件和.sql文件,然后从.bat文件调用.sql文件。我的问题是如何将其输出存储在任何位置,然后发送到电子邮件

我现在的蝙蝠看起来像

osql -S <ServerName> -U <User Name> -P <Password> < mysqlfile.sql

感谢您的帮助。

您可以设置SQL Server 2008数据库邮件,如图所示

然后,您可以通过电子邮件发送查询结果,如图所示,或者使用VBscript来执行查询

osql -S <ServerName> -U <User Name> -P <Password> -o Out.txt < mysqlfile.sql
Blat out.txt -to <recipient> -s <subject> -server <ip or hostname of SMTP server:<port> 
@echo off
setlocal

if exist "out.txt" del "out.txt"
osql -S Server -U user -P password -o Out.txt < mysqlfile.sql
set vbs_=Email.vbs
set skip=
findstr "'%skip%VBS" "%~f0" > "%vbs_%"
cscript //nologo "%vbs_%"
ping -n 3 localhost>nul
if exist "%vbs_%" del "%vbs_%"
goto :eof

 Const ForReading = 1, ForWriting = 2                      'VBS
 sFile="Out.txt"                                           'VBS
 Set oFso = CreateObject("Scripting.FileSystemObject")     'VBS
 Set oFile = oFso.OpenTextFile(sFile, ForReading)          'VBS
 Set oMail=CreateObject("CDO.Message")                     'VBS
 sSchema="http://schemas.microsoft.com/cdo/configuration/" 'VBS
     with oMail.Configuration.Fields                       'VBS
     .Item(sSchema & "sendusing")= 2                   'VBS  
     .Item(sSchema & "smtpserver")= "YourServer"       'VBS
     .Item(sSchema & "smtpserverport") = 25              'VBS 
     .Update                                           'VBS                                              
     end with                                              'VBS 
 oMail.Subject="SQL Log"                                   'VBS
 oMail.From="email@domain.com"                             'VBS
 oMail.To="Sendto@someother.com"                           'VBS
 oMail.TextBody = oFile.ReadAll                            'VBS 
 oMail.Send                                                'VBS
 oFile.Close                                               'VBS 
 set oMail=nothing                                         'VBS
 set oFile = Nothing                                       'VBS
osql-S-U-P-Out.txtnul
如果存在“%vbs%”删除“%vbs%”
后藤:eof
读取常数=1,写入常数=2'VBS
sFile=“Out.txt”VBS
一组so=CreateObject(“Scripting.FileSystemObject”)VBS
文件集=of so.OpenTextFile(sFile,ForReading)'VBS
设置oMail=CreateObject(“CDO.Message”)的VBS
sSchema=”http://schemas.microsoft.com/cdo/configuration/“‘VBS
使用oMail.Configuration.Fields的VBS
.项目(sSchema和“发送使用”)=2'VBS
.Item(sSchema和“smtpserver”)=“YourServer”VBS
.项目(sSchema和“smtpserverport”)=25'VBS
.更新“VBS”
以“VBS”结尾
oMail.Subject=“SQL日志”VBS
oMail.From=”email@domain.com“‘VBS
oMail.To=”Sendto@someother.com“‘VBS
oMail.TextBody=oFile.ReadAll的VBS
oMail.Send'VBS
关闭VBS
设置oMail=nothing的VBS
文件集=无的VBS

什么版本的sql server?您好,我运行了上面的批处理文件,但它给了我以下错误,请您更详细地说明sSchema…以下是错误D:\Test\mail.vbs(7,1)CDO.Message.1:“SendUsing”配置值无效。系统找不到指定的文件。C:\Program Files\CA\WA Agent R11.3.1\Email.vbs(4,2)Microsoft VBScript运行时错误:未找到文件C:\Program Files\CA\WA Agent R11.3.1\Email.vbs(4,2)Microsoft VBScript运行时错误:未找到文件OK。我从中得到的信息是,您首先只获取了VBS代码,创建了MAIL.VBS并对其进行了测试。返回的有关SendUsing配置值的错误无效。SendUsing的值为2表示使用端口发送。您确定SMTP服务器正在侦听端口25吗?尝试使用
Telnet your.smtp.server 25
远程登录到它,并查看它是否以220作为响应。如果没有,请使用端口443远程登录到您的服务器,并查看它是否响应。如果它在443上响应,而不是在25上响应,我们必须稍微调整代码以使用ssla。在您这样做之后,您在C:\Program Files\CA\WA Agent R11.3.1目录中创建了批处理文件并运行了它,这导致了文件未找到错误。如果从未创建out.txt文件,则会发生这种情况。您是否创建了一个名为mysqlfile.sql的文件,其中包含T-sql查询并将其放在同一目录中?或者更改批处理中.sql文件的名称以匹配您的?如果你不那样做,它就不会起作用。
@echo off
setlocal

if exist "out.txt" del "out.txt"
osql -S Server -U user -P password -o Out.txt < mysqlfile.sql
set vbs_=Email.vbs
set skip=
findstr "'%skip%VBS" "%~f0" > "%vbs_%"
cscript //nologo "%vbs_%"
ping -n 3 localhost>nul
if exist "%vbs_%" del "%vbs_%"
goto :eof

 Const ForReading = 1, ForWriting = 2                      'VBS
 sFile="Out.txt"                                           'VBS
 Set oFso = CreateObject("Scripting.FileSystemObject")     'VBS
 Set oFile = oFso.OpenTextFile(sFile, ForReading)          'VBS
 Set oMail=CreateObject("CDO.Message")                     'VBS
 sSchema="http://schemas.microsoft.com/cdo/configuration/" 'VBS
     with oMail.Configuration.Fields                       'VBS
     .Item(sSchema & "sendusing")= 2                   'VBS  
     .Item(sSchema & "smtpserver")= "YourServer"       'VBS
     .Item(sSchema & "smtpserverport") = 25              'VBS 
     .Update                                           'VBS                                              
     end with                                              'VBS 
 oMail.Subject="SQL Log"                                   'VBS
 oMail.From="email@domain.com"                             'VBS
 oMail.To="Sendto@someother.com"                           'VBS
 oMail.TextBody = oFile.ReadAll                            'VBS 
 oMail.Send                                                'VBS
 oFile.Close                                               'VBS 
 set oMail=nothing                                         'VBS
 set oFile = Nothing                                       'VBS