hgu*_*yan 21 sql-server logging
如果你有一个长期运行的SP,你会以某种方式记录它的行为或只是等待这个消息?
"命令已成功完成."
我假设,在这个问题上可以有很多解决方案,但是有没有最佳实践 - 经常使用的简单解决方案?
编辑
我发现了一个关于这个主题的有趣链接
http://weblogs.sqlteam.com/brettk/archive/2006/09/21/12391.aspx
文章描述了使用日志表,但是有一个问题
记录过程必须在任何事务之外执行
我不能在外部调用该插入,因为我使用的游标并在每一行上向该表插入一行.
有任何想法吗?
编辑2
挖掘..
SQL Server中有一个xp_logevent.你试过吗?
那么SQL Server Profiler呢?
Mar*_*ith 22
你是如何调用存储过程的?如果是通过Management Studio,则可以轻松打印出如下消息
RAISERROR ('Some debugging info', 0, 1) WITH NOWAIT
Run Code Online (Sandbox Code Playgroud)
这比使用更好,PRINT因为消息会立即显示.通过连接Connection.InfoMessage事件的处理程序,也可以在ADO.NET中捕获这些消息.
我看到你已经列出了SQL Profiler的可能性.您可能有兴趣知道可以在SQL 事件探查器中记录自己的用户可配置事件.
dal*_*man 10
为了查看事情的持续时间以及上一个操作修改的行数,我将当前日期+时间和最后一行计数添加到每个条目.我用这个程序:
CREATE PROCEDURE dbo.[Log]
@Message NVARCHAR(512),
@RowCount INT = null OUTPUT,
@Delimiter NCHAR(1) = N' ',
@PadChar NCHAR(1) = N'-'
AS
BEGIN
SET @RowCount = @@ROWCOUNT;
DECLARE @LogDate AS NVARCHAR(50);
DECLARE @RowCountPadded AS NCHAR(8);
SET @LogDate = CONVERT(NVARCHAR(50),GETDATE(),121);
SELECT @RowCountPadded = CASE @RowCount WHEN 0 THEN REPLICATE(@PadChar,8) ELSE REPLACE(STR(@RowCount, 8), SPACE(1), @PadChar) END;
SET @Message = @LogDate + @Delimiter + @RowCountPadded + @Delimiter + @Message;
RAISERROR (@Message, 0, 1) WITH NOWAIT;
END
Run Code Online (Sandbox Code Playgroud)
因此,在您的过程中,添加如下日志输出:
EXEC dbo.[Log] 'the message';
Run Code Online (Sandbox Code Playgroud)
它产生了这个:
2012-12-28 11:28:25.197 -------- the message
Run Code Online (Sandbox Code Playgroud)
如果您之前执行过某些操作,则会看到破折号所在的行数.如果您需要其他内容的行计数(例如,记录到表),您可以从过程中将其作为OUTPUT参数返回.
更新:如果您想创建此过程一次并在任何地方使用它,请使用此要点.
- 删除线---