这是非常微不足道的,但如果有人手头有答案,我会很感激。
我使用msdb..sp_send_dbmail存储过程作为分发简单报告的轻量级方法。这通常需要生成 CSV。但是,存储过程包括 Unicode little-endian 前缀 FF FE。这会混淆 Excel,导致它不会自动将 CSV 解析为列。
有许多变通方法:使用真正的报告平台(我们有 Crystal,但它从来没有可靠地工作过);将文件发送到一个小应用程序,该应用程序将文件转换为 ANSI 并继续发送;使用制表符分隔符(我最喜欢的);或教育收件人如何使用 CSV(开个玩笑,我们都知道这是不可能的)。
但是,我很想在某处拨动一个开关并告诉 SQL Server 停止将附件创建为 Unicode,因为我没有这样的需要。我还没有找到这样的设置;这可能吗?
谢谢!
编辑
根据 Rohan 的回答,SQL 代理作业步骤中的这个脚本几乎可以工作:
$reportQuery = "EXEC Routine..TopTenReviewsReport @DoNotLog = 1"
$filePath = "\\SQLBI001\RawData\TopTenReviewsReport.csv"
$mailQuery = "
EXEC msdb..sp_send_dbmail
@profile_name = 'X',
@recipients = 'X',
@subject = 'X',
@file_attachments = '" + $filePath + "'"
Invoke-Sqlcmd -query $reportQuery | export-csv $filePath
$result = Invoke-Sqlcmd -query $mailQuery
Run Code Online (Sandbox Code Playgroud)
该文件现在有一个“#TYPE System.Data.DataRow”前缀,而不是 0xFF FE,但它现在是 ANSI,所以就是这样。
我使用这个系统存储过程 dbo.sp_send_dbmail从我的数据库发送电子邮件,我想知道这个过程是否可以防止 SQL 注入?
如果你有一些参考,这对我来说是有用的。
提前致谢。
我目前正在处理一堆服务器,它们有不同的数据库邮件配置。
我可以看到每个服务器的数据库邮件配置。
我使用以下脚本:
--==========================================================
-- getting the Database Mail Configuration
-- Marcelo Miorelli
-- 1-April-2014
--==========================================================
select @@servername
--SQLSALON1\STOCKALLOCATION
-- http://dba.stackexchange.com/questions/47058/how-can-i-see-the-current-database-mail-configuration
EXEC msdb.dbo.sysmail_help_configure_sp;
EXEC msdb.dbo.sysmail_help_account_sp;
EXEC msdb.dbo.sysmail_help_profile_sp;
EXEC msdb.dbo.sysmail_help_profileaccount_sp;
EXEC msdb.dbo.sysmail_help_principalprofile_sp;
EXEC msdb.dbo.sysmail_help_account_sp
Run Code Online (Sandbox Code Playgroud)
实际上,msdb.dbo.sysmail_help_account_sp在这方面,程序是我最喜欢的。
现在我想通过电子邮件发送前一天的备份历史记录(仅完整备份和差异备份),我需要找出每个服务器的配置文件名称。
我想通过将上述过程的内容保存到临时表或表变量中来完成此操作,并在我拥有所需的所有数据并且即将通过电子邮件发送给他们时从中查询信息。
对于那些程序,特别是 sysmail_help_account_sp,我该如何做到这一点?
我特别需要找出profile name. 我已经用于DBA下面的脚本。
这是我用来生成电子邮件内容的脚本:
--=====================================================================================================================
-- sql server backups report in HTML format to be emailed
--http://dba.stackexchange.com/questions/81432/how-do-i-use-powershell-to-get-a-sql-server-backup-status
--marcelo miorelli
--19-nov-2014
--=====================================================================================================================
DECLARE @Body VARCHAR(MAX),
@TableHead VARCHAR(MAX),
@TableTail VARCHAR(MAX)
SET NoCount ON ; …Run Code Online (Sandbox Code Playgroud) 我正在编写一个存储过程来使用sp_send_dbmail系统存储过程来发送 HTML 电子邮件。我以前使用过这个程序,但以前没有遇到过这个问题。我正在使用此处列出的构建方法
从网上我认为NVARCHAR(MAX)应该最多容纳 2 147 483 647 个字符(ref)
但是,当我构建我的输出时,如果我PRINT输出它不会返回完整的字符串。
我已经单独测试了我的 SQL,这按预期返回。
显然我有一个错误,但有人可以指出它是什么吗!
脚本是:
Declare @RawPart varchar(30);
Declare @PO varchar(30);
Declare @NL varchar(12)='<br/>';
DECLARE @BodyHTML NVARCHAR(MAX) ;
Declare @SubjectText varchar(200);
Declare @StaffEmail varchar(50);
Declare @MrpDate varchar(12);
Set @MrpDate=(Select convert (varchar(12),[SnapshotDate],103) from [dbo].[MrpReqCtl] )
set @StaffEmail='SOMEPLACE@DOMAIN.co.uk';
set @SubjectText ='Schedule Update from MRP Email';
Set @PO='106277';
Set @RawPart=(Select Distinct MStockCode From dbo.PorMasterDetail Where PurchaseOrder=@PO and LineType=1)
--N'<p>Attention From the Mrp run '+@MrpDate+N'</p><p>Has …Run Code Online (Sandbox Code Playgroud) 我有一封电子邮件失败,函数返回值为“101”,@@error 值为“0”(没有添加行sysmail_allitems)。
在哪里可以找到有关此函数返回代码的文档?
显示我如何获得上述值的示例代码:
exec @result = msdb.dbo.sp_send_dbmail
@profile_name = 'OBFUSCATED',
@recipients = @DL,
@subject = 'OBFUSCATED',
@body = @emailBody,
@body_format='html',
@query = @reportQuery,
@exclude_query_output = 1,
@attach_query_result_as_file = 1,
@query_attachment_filename = @filename,
@query_result_separator = @temp,
@query_result_header = 1,
@mailitem_id = @mailitem_id
;
set @temp = @@ERROR;
Run Code Online (Sandbox Code Playgroud) 我团队中的一些开发人员知道具有扩展权限的 SQL 帐户的密码
我们希望在任何开发人员使用任何这些 SQL 帐户进行连接时进行跟踪并收到警报
我们即将logon trigger为每次登录尝试实施该功能,评估登录的属性,并在符合特定条件时发送电子邮件报告。逻辑如下:
如果 original_login() 在(...此处列出 SQL 帐户...)并且:
a) 客户端 IP 地址是 192.168.xx VPN 子网(没有从该子网连接的生产应用程序,只有开发人员可以)或
b) 客户端主机名在(... Dev 的主机名称列表...)或
c)(SSMS、az-Data 等)中的客户端应用程序名称
exec sp_send_dbmail(通过电子邮件向 DBA 发送报告)
触发器将具有“execute as”子句并代表唯一权限是发送数据库邮件电子邮件的 SQL 登录名运行
在 Production 上启用这种登录触发器会产生什么不良副作用?
它会减慢登录过程或导致任何其他问题吗?
ps 我知道DAC以及如何使用它。
测试连接使用DAC并依靠它来帮助我在出现任何问题时禁用触发器
sql-server database-mail logins sql-server-2017 logon-trigger
如何从 SQL Server 2014 中的 SQL Server 作业发送电子邮件。我想通过存储过程而不是 Windows 服务来实现电子邮件通知。
我必须每天执行 SQL 语句并将结果通过电子邮件发送给 dba。我配置了数据库电子邮件。
下面是查询:
SELECT
account.accountID,
account.name
FROM
account
LEFT OUTER JOIN accountfeaturesetting afs
ON afs.accountid = account.accountid
and afs.featureid = 'Schedules'
and afs.settingid = 'EditReasons'
WHERE
ISNULL(afs.Value, '0') = '1'
AND NOT EXISTS
(SELECT 1 FROM program
WHERE program.AccountID = account.AccountID
AND program.Active = 1 AND
(program.ScheduleEditReasonFlags <> 0 OR
program.ScheduleEditReasonFields <> 0))
AND account.IsMaster = 0
Run Code Online (Sandbox Code Playgroud)
为此,我创建了具有 2 个步骤的 Sql 作业:
发送结果:
Use MSDB
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'abc',
@recipients = 'recipients@company.com',
@subject = 'queryresultset',
@body='testmail', …Run Code Online (Sandbox Code Playgroud)通常,我们管理的服务器会通过操作员/配置文件/DBMail 处理大量 SQL 噪音警报,这为我们提供了有关服务器上出现的任何问题的最原始信息。
似乎在 Azure VM 中,通过端口 25 的出站被禁用且无法启用(就我的运气而言,就是这样)。这可以防止典型地使用中继到我们的邮件服务器,然后将邮件发送到我们的票务委员会。
有没有人遇到过类似的情况,如果有,您是否找到了任何好的解决方法?我相信这个问题有点令人困惑,所以请询问需要的任何相关信息。
使用sp_send_dbmail在 SQL Server 上发送电子邮件时,如何指定以加密格式发送电子邮件?
security sql-server encryption sql-server-2012 database-mail
database-mail ×10
sql-server ×9
azure ×1
backup ×1
dynamic-sql ×1
encryption ×1
logins ×1
security ×1