SQL Msg 18054, Level 16, State 1
Posted icuic
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Msg 18054, Level 16, State 1相关的知识,希望对你有一定的参考价值。
今天接到一个看起来很简单的任务--修改数据库中的一项数据。听起来很简单吧。
在网上搜索了一下,很快就拼凑出了相应的 SQL 语句:
UPDATE [suivi].[dbo].[numSerie]
SET ni_numCible = \'HF17263N7P13340\'
WHERE ni_num = \'HF17262A1400234\'
通过以上语句也可以看出来,任务很简单,在 [suivi].[dbo].[numSerie] 表中,查找 ni_num = \'HF17262A1400234\' 的记录,将该条记录的 ni_numCible 字段设置为 \'HF17263N7P13340\'。
出乎意料,在执行了以上语句之后,出现了以下提示:
Msg 18054, Level 16, State 1, Procedure tg_InsUpdCible, Line 31
Error 50010, severity 16, state 1 was raised, but no message with that error number was found in sys.messages. If error is larger than 50000, make sure the user-defined message is added using sp_addmessage.
Msg 3609, Level 16, State 1, Line 1
The transaction ended in the trigger. The batch has been aborted.
执行完后不是应该出现 “xx Rows afftectd” 的吗,作为 SQL 小白的我,对于这一大堆提示信息,表示看不懂。
好吧,上 Google 上搜索一下吧,OK,就第一条结果看看。
看起来跟我得到的错误信息差不多,来仔细瞧一瞧。发现以下一段代码:
/*Check for valid parameter*/
If LEN(@txtBidderID) =0 or ISNULL(@txtBidderID,\'\') =\'\'
RAISERROR(50002,10, 1,\'Error Accessing Bidder Record - Must Provide Bidder ID\')
ELSE
作者得到的 Error 50002 应该就是这里输出的啦,那我接下来的工作,就该是找到我这里输出 Error 50010 的那个文件在哪了,找到之后,为啥要给我甩出 Error 50010 就清楚了,如何避免也就迎刃而解了!
可是作者贴出来的是个啥文件,不知道,依次搜索了该文件中的几个关键字后,我 get 到了 trigger 这个概念,大意是说,在执行 insert \\ update \\ delete 操作之前或是之后,会自动触发一些操作。可这个 trigger 在哪,来找找吧。
查看上图中高亮文件的内容,果然,里面写明了,在什么样的条件下,就会甩出 Error 50002 .
右键该文件,哎,有个 Disable 菜单,看起来是禁用这个 trigger 的意思。
禁用该 trigger 以后,再执行本文最初的 SQL 语句,成功啦!最后再将该 trigger 使能。OK,任务完成!
今天遇到的这个小问题,对于稍懂 SQL 的人来说,应该是非常容易解决的。可是对于我这样对 SQL 知之甚少的人来说,也算得上如临大敌了。现在把解决问题的过程记录下来,一来是给遇到同样问题的其他人提供解决方法,更重要的是提醒自己,遇到问题,重点是要解决问题,不要一遇到某个的问题,就找一堆相关的教程来从头啃,这肯定是不行的,毫无疑问,如此不到半小时就会放弃。始终要把解决当前的问题作为根本目的,一步步来,问题自然就会解决的。
以上是关于SQL Msg 18054, Level 16, State 1的主要内容,如果未能解决你的问题,请参考以下文章