我想弄清楚 sp_send_dbmail 的最佳使用实践,但我在网上找不到任何答案。
我们的开发人员喜欢使用 sp_send_dbmail 从应用程序内部发送与应用程序相关的电子邮件。假设例如用户忘记了他们的密码,他们将通过执行 sp_send_dbmail 发送用户请求的密码重置电子邮件。这只是他们使用此存储过程发送的多种电子邮件类型之一。这是一个好习惯吗?对我来说,这感觉像是一个肮脏的解决方案,因为有许多 API 可以处理您的应用程序中的电子邮件发送,而作为 DBA,我不喜欢在生产服务器上启用这些选项。我只是别无选择。也许有足够的动机和证据证明这是不好的做法和/或由于各种原因有潜在危险,我可以动摇他们改变它。
我需要登录触发器。我需要从 Excel Pivot 文件中捕获进入 SQL Server 的 SQL 查询。
目前我正在使用以下代码:
CREATE TRIGGER [MyLogonTrigger] ON ALL SERVER FOR LOGON
AS
BEGIN
IF PROGRAM_NAME() <> 'Microsoft%'
DECLARE @sqltext VARBINARY(128)
SELECT @sqltext = sql_handle
FROM sys.sysprocesses
WHERE spid = @@spid
DECLARE @SQLQuery varchar(MAX)
set @SQLQuery = (select TEXT
FROM sys.dm_exec_sql_text(@sqltext))
INSERT INTO TestDatabase.dbo.LogonAudit
(
... audit columns ...
)
Select
SUSER_SNAME()
,GETDATE()
,@@SPID
,PROGRAM_NAME()
,ORIGINAL_DB_NAME()
,HOST_NAME()
,client_net_address
,@SQLQuery
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
END;
Run Code Online (Sandbox Code Playgroud)
我面临的问题是@SQLQuery每次都是创建触发器定义代码,而不是刷新数据透视表时从 Excel 文件传递给 SQL 的实际查询。
我认为这与登录和实际选择查询执行发生在两个不同的事务(SPID)上有关。 …
我想知道是否有一种简单的方法可以使用 TSQL 代码检查每个作业步骤的“运行方式”值,而不是打开服务器上的每个作业和每个单独的步骤?我不知道从哪里获取这些数据,我已经在 MSDB 中搜索过,但在 sysjobs 和相关表中找不到任何内容?SQL 必须将该值存储在某处。问题是在哪里?