我有一个批量数据,我打算使用Sybase中的简单SQL插件上传。 现在一些sql由于某些约束违规而失败。
由于我一次性运行所有sqls,我找不到哪个sql失败。
数据库客户端控制台就是打印它,
Attempt to insert duplicate key row in object 'Employee' with unique index 'Employee_uk'
(0 rows affected)
所以我想有一个INT来捕获每个insert语句的执行并在它们失败时打印。
我发现这是一个程序,但我似乎找不到为SQL做的方法,
DECLARE @status INT
EXECUTE @status = proc_sample
IF @status != 0
PRINT 'procedure failed'
有没有办法获取插入的返回码?还是其他任何方式?
注意:我不希望每个sql都有一个BEGIN和END,因为它需要这么长时间而且我买不起。
干杯!!
答案 0 :(得分:2)
您需要在INSERT语句(我假设您正在执行)之后直接检查@@ error。如果它不是0,那么你只是有一个错误条件。但是,错误检查必须在INSERT之后立即进行。 执行的任何其他语句将清除错误状态。最佳复制@error第一:
DECLARE @err INT
[...]
INSERT INTO mytable....
SET @err = @@ERROR
IF @err <> 0
BEGIN
... error action...
END