我在互联网上看了很多,但找不到解决方案。有什么方法可以使用SQL Server Express Edition自动发送电子邮件报告?我能够配置服务器,并且如果手动运行代码,它将发送电子邮件,但是我需要它每周发送一次电子邮件。
这是我的脚本示例:
exec msdb.dbo.sp_send_dbmail
@profile_name = 'MailTest3',
@recipients = 'a@aaa.com',
@subject = 'Mail Test 2',
@body = 'Mail Sent Successfully',
@body_format = 'text'
我在下面的建议中将所有内容设置为 Andrey Nikolov ,但没有成功。没有自动发送电子邮件。
检查日志后,我发现此消息:
对对象'sp_send_dbmail'的EXECUTE权限被拒绝, 数据库'msdb',架构'dbo'.as
因此,它看起来像权限问题。但是,在尝试使用
授予dbo用户权限时EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
,@membername = 'db_username';
GO
脚本我收到一条消息,找不到该用户:
消息15410,级别11,状态1,过程msdb.dbo.sp_addrolemember, 第35行[批处理开始第0行]用户或角色'db_username'没有 该数据库中存在。
此脚本仅比我对域用户尝试的有效。
*。bat文件只有在与域用户一起运行后才开始工作
sqlcmd -S localhost -E -Q "EXEC Send_email_Friday" -o "C:\Log_email.txt"
答案 0 :(得分:0)
SQL Server Express不支持数据库邮件。如果这仅是开发系统,则可以安装SQL Server Developer版本,但未获得生产使用许可。为此,您需要购买SQL Server的完整副本。
答案 1 :(得分:0)
SQL Server Express的问题是没有代理按计划运行脚本。但是您可以使用Windows Task Scheduler和sqlcmd来做到这一点。
D:\Scripts\WeeklyReport.sql
。sqlcmd.exe
。通常您可以在C:\Program Files\Microsoft SQL Server\xxx\Tools\Binn
中找到它,其中xxx
取决于您的SQL Server版本,例如120
。-S MyComputer\SQLEXPRESS -d MyDatabaseName -U myusername -P mypassword -i D:\Scripts\WeeklyReport.sql
(以防您使用用户名和密码进行连接,即SQL身份验证),或者省略用户名和密码的参数,并指定-E以使用Windows身份验证。在后一种情况下,它将在登录上下文中连接,这将运行计划的任务。创建计划任务时,打开属性对话框并检查安全性选项。您可能想要更改它们,以运行命令,即使当前没有用户登录:
关闭对话框,然后尝试运行任务以确认其正常运行。为了进行诊断,您可能需要指定一个输出文件,在该文件中将保存执行结果(添加-o D:\Scripts\WeeklyReport.txt
)。