简体   繁体   English

通过邮件计划的SQL Server报告

[英]Scheduled SQL Server reports via mail

I'm using SQL Server 2008 Express, and my question: is there any way to create daily reports that will calculate space available for each database, and send that report to one specific email address? 我正在使用SQL Server 2008 Express,我的问题是:有什么方法可以创建每日报告来计算每个数据库的可用空间,并将该报告发送到一个特定的电子邮件地址? Format of report doesn't matter at all, how can I do that? 报告的格式完全没有关系,我该怎么办? Thanks for all advice 感谢您的所有建议

The below is more to set you on the right path. 以下是使您走上正确道路的更多方法。 you'll need to have a look at the below, understand it, adapt it for your requirements, and then use Task Scheduler to use it. 您需要查看以下内容,了解它,使其适应您的要求,然后使用Task Scheduler来使用它。 I cannot/will not support it; 我不能/不会支持; it's up to you to be able to do that, and if you can't do that don't use it. 取决于您是否能够做到这一点,如果不能做到这一点,请不要使用它。

The below is a Powershell script that makes use of sqlcmd to get the data, and then uses Send-MailMessage . 下面是一个Powershell脚本,该脚本使用sqlcmd来获取数据,然后使用Send-MailMessage I didn't use Invoke-sqlcmd as I don't have installed at the office. 我没有使用Invoke-sqlcmd因为我没有在办公室安装。 I'm sure someone could show how to use that as well. 我相信有人也可以展示如何使用它。 You'll need to set the credentials/server settings for your mail server: 您需要为邮件服务器设置凭据/服务器设置:

$Query = "
DECLARE @SQL nvarchar(MAX) = N'USE ?' + NCHAR(10) +
                             N'INSERT INTO ##Files(DatabaseName, DBFile, SizeMB, SpaceUsed)' + NCHAR(10) +
                             N'SELECT ''?'', [name] AS DBFile, Size, FILEPROPERTY(name,''SpaceUsed'') AS SpaceUsed' + NCHAR(10) +
                             N'FROM sys.database_files' + NCHAR(10) +
                             N'WHERE Type_desc = ''ROWS'';';

EXEC sys.sp_MSforeachdb @command1 = @SQL,
                        @precommand = N'CREATE TABLE ##Files(DatabaseName sysname, DBFile sysname, SizeMB int, SpaceUsed int);',
                        @postcommand = N'SELECT DatabaseName, SUM(SizeMB) AS Size, SUM(SpaceUsed) AS SpaceUsed, SUM(SizeMB - SpaceUsed) AS FreeSpace FROM ##Files GROUP BY DatabaseName; DROP TABLE ##Files;';"

$databases = sqlcmd -S YourSQLServer -E -d master -Q "$Query"  -s "," -W | Out-String
Write-Host $databases
Send-MailMessage -From "FromAddress@YourDomain.com" -To "ToAddress@YourDomain.com" -Subject "DB Space Remaining" -Body "$databases" -SmtpServer exchange 

Note that this also made use of the undocumented procedure sp_MSforeachdb . 请注意,这还利用了未记录的过程sp_MSforeachdb

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM