gpt4 book ai didi

sql-server - 我如何知道我的存储过程是否在 MS SQL Server 中被删除?

转载 作者:行者123 更新时间:2023-12-03 01:27:25 25 4
gpt4 key购买 nike

有时会发生这种情况,我如何知道我的存储过程何时在我不知情的情况下被删除/删除?

每当我调试并发现几天前创建并测试的存储过程不退出时,我都会感到烦恼。

有没有办法知道MS SQL Server中删除的存储过程?

最佳答案

检查过程是否存在的标准方法是

if exists(
SELECT * FROM INFORMATION_SCHEMA.ROUTINES
WHERE routine_type = N'PROCEDURE' and routine_name = @procname)
print 'exists'

从 MSSQL 2005 开始,您可以使用 [DDL 触发器]( http://msdn.microsoft.com/en-us/library/ms190989(SQL.90%29.aspx) 在删除或创建过程时发送电子邮件通知:

USE msdb
GO
CREATE TABLE ddl_log
(ID int idenity(1,1) PRIMARY KEY CLUSTERED,
PostTime datetime,
DB_User nvarchar(100),
Event nvarchar(100),
TSQL nvarchar(2000));

CREATE TRIGGER DDL_Notify
ON DATABASE
FOR DROP_PROCEDURE, CREATE_PROCEDURE
AS
DECLARE @data XML,
@tableHTML NVARCHAR(MAX) ;

SET @data = EVENTDATA()

INSERT msdb.dbo.ddl_log (PostTime, DB_User, Event, TSQL)
VALUES (GETDATE(), CONVERT(nvarchar(100), USER_NAME()),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;

SET @tableHTML =
N'<H1>DDL Table Event</H1>' +
N'<table border="1">' +
N'<tr><th>Post Time</th><th>User</th>' +
N'<th>TSQL</th><th></tr>' +
CAST ( ( SELECT td = PostTime, '',
td = DB_User, '',
td = TSQL, ''
FROM msdb.dbo.ddl_log
WHERE id = (select max(id) from msdb.dbo.ddl_log)
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>';

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Default',
@recipients = 'dba@youraddress.com',
@subject = 'DDL Table Event',
@body = @tableHTML,
@body_format = 'HTML'

关于sql-server - 我如何知道我的存储过程是否在 MS SQL Server 中被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/743712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com