如何在数据库中停止并存储无重复的错误消息

时间:2013-12-13 17:15:24

标签: asp.net sql sql-server

你好我正在尝试做一个报告并找出一种方法来捕获不同的错误消息存储在一个 但是我希望存储每个不同的错误消息供以后使用。

任何帮助都会很棒

提前谢谢。

如果任何代码失败,我会有存储异常的页面。

即使表每周丢弃一次,我想要一种不进行插入的方法,除非它是队列错误。如果有重复匹配 或者类似于错误的东西,但是在另一页上。

例如,

表中有一个名为errorMessage

的值

一行可以有www.test.com/default.aspx?option=2

抛出sql错误

第二行可以具有相同的消息,但具有不同的选项值。

是否有办法拥有1条记录并对该记录进行计数

例如

www.test.com/default.aspx?option=2 count = 2

这样我可以减少存储的错误消息量。

2 个答案:

答案 0 :(得分:0)

我不会执行INSERT命令来存储每个错误,而是调用存储过程来检查表中是否已存在该错误消息(使用SELECT命令获取任何匹配行的ID)。如果找到一个,则进行更新。如果没有,请执行INSERT。

使用存储过程的好处是效率更高,只需要往返DB一次。

另一个更复杂且可能有点令人毛骨悚然的选择是使用触发器(BEFORE INSERT)。比较“inserted”表中的语句,看它是否与表中的另一行匹配,然后您可以跳过插入(ROLLBACK TRANSACTION)并进行更新。如果您对语法感兴趣,请查看此SO示例。 https://stackoverflow.com/a/794592/283895

答案 1 :(得分:0)

希望我理解你的问题。这将是我的解决方案。

有一个名为“ErrorMessages”的表,它由两列组成,“ErrorMessage”和“ErrorCount”

我的sql会是以下会增加errorcount,如果它已经存在,那么它会更新它:

 DECLARE @ErrorMessage as nvarchar(4000)
 SET @ErrorMessage = "This is my error message"
 IF EXISTS(SELECT ErrorMessage FROM ErrorMessages WHERE ErrorMessage = @ErrorMessage)
      UPDATE ErrorMessages SET ErrorCount = ErrorCount + 1 WHERE ErrorMessage = @ErrorMessage
 ELSE
      INSERT ErrorMessages (ErrorMessage, ErrorCount) VALUES (@ErrorMessage, 1)