2010-05-25 40 views
1

有哪些我的更新或插入语句,未能在try..catch SQL问题

+0

请问哪种编程语言? – vodkhang 2010-05-25 12:51:01

+0

某些数据库引擎允许TRY ...类似CATCH的语句。如果我没有记错的话,SQL Server会这样做。你想要完成什么?你使用什么数据库引擎? – 2010-05-25 12:51:18

+2

大概你在这里指的是存储过程/函数?如果您使用的是RDBMS平台,它会很有帮助。 – 2010-05-25 12:52:13

回答

3

开始创建一个表,你已经运行变量 插入的步骤或错误信息到表varaiable你去通过proc 。 在catch中回滚之后,表变量仍然可用,然后用它插入到日志表中。

1

如何围绕你的更新和插入语句与不同的try-catch块?你

还可以检查SELECT ERROR_MESSAGE(), ERROR_STATE()以确定是什么抛出当前异常

+0

并每次重复捕获逻辑? – 2010-05-25 17:24:18

+0

@KM:通常这只是几串代码..在我的应用程序 - 5(每个sp重复97次)。为什么不?当然,如果它包含更多的字符串,更多的逻辑 - 复制是一个坏主意。但为什么不把它执行到额外的存储过程? – abatishchev 2010-05-25 17:34:54

+0

如果使用临时表或任何其他导致过程重新编译的事情,则会向系统添加负载,因为每次运行过程时都必须重新编译该重复代码,更不用说混淆实际代码并使每个过程比它需要的时间更长。 – 2010-05-25 18:42:35

0

堆栈转储可能包含一些信息,如哪一行错误发生,但是这不是直接有用的。

最简单的可能是在每个查询之前设置一个变量,然后您可以在catch中检查它的值。

0

想到的一件事是在事件查看器执行后立即将错误代码记录到事件查看器中。

例如

尝试 err_code = 1 --query 1-- err_code = 2 --query 2-- 。 。 。 Catch - 将log err_code记录到事件查看器 -

然后通过查看事件查看器,您将看到最后一次成功查询的err_code。

希望它有助于

0

尝试这样的事:

Declare @Where varchar(50) 

BEGIN TRY 
    SET @Where='1st update' 
    UPDATE.... 
    SET @Where=NULL 

    ... 

    SET @Where='2nd update' 
    UPDATE.... 
    SET @Where=NULL 

    ... 

    SET @Where='1 insert' 
    INSERT.... 
    SET @Where=NULL 


END TRY 
BEGIN CATCH 
    PRINT @Where 

END CATCH