1

我有一个批量数据,我打算在 Sybase 中使用简单的 SQL 插入上传。现在,由于某些约束违反,一些 sql 失败。

由于我一口气运行了所有的sql,所以我找不到哪个sql失败了。

DB客户端控制台只是打印这个,

Attempt to insert duplicate key row in object 'Employee' with unique index 'Employee_uk'
(0 rows affected)

所以我想有一个 INT 来捕获每个插入语句的执行并在它们失败时打印。

我为一个过程找到了这个,但我似乎找不到为 SQL 做这件事的方法,

DECLARE @status INT
EXECUTE @status = proc_sample
IF @status != 0
    PRINT 'procedure failed'

有没有办法获取插入的返回码?还是有其他方法?

注意:我不想为每个 sql 设置一个 BEGIN 和 END,因为它需要很长时间,而且我负担不起。

干杯!!

4

1 回答 1

2

您需要在 INSERT 语句(我假设您正在执行)之后直接检查 @@error。如果它不是 0,那么您只是遇到了错误情况。但是,错误检查必须在 INSERT 之后立即进行。执行的任何其他语句都将清除错误状态。最好先复制@error:

DECLARE @err INT
[...]
INSERT INTO mytable....
SET @err = @@ERROR
IF @err <> 0
BEGIN
... error action...
END
于 2016-04-29T00:31:32.757 回答