@@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。

    技术2022-05-11  59

    比如下面的SQL 语句:

    select EmployeeID from employees  -- 这条SQL 语句返回9条记录print(@@error)print(@@ROWCOUNT)

    返回的结果是:

    (9 row affected)

    00

    select EmployeeID from employees  -- 这条SQL 语句返回9条记录print(@@ROWCOUNT)print(@@error)返回的结果是:

    (9 row affected)

    90

    原因,后一个打印出来的是前一个print 执行后的对应变量的结果。

    如果想在一个语句执行后,即获得 @@ROWCOUNT 也获得 @@error,需要用一个SQL 语句把它们读出来:declare @a int ,@b intselect EmployeeID from employees  -- 这条SQL 语句返回9条记录select @a = @@ROWCOUNT,@b = @@errorprint(@a)print(@b)

    在这个一句读取数据中,先取那个都无所谓。也就是 select @b = @@error,@a = @@ROWCOUNT 也可以。但是必须是一句,如果变成两句,就又有上面的问题了。

    declare @a int ,@b intselect EmployeeID from employees  -- 这条SQL 语句返回9条记录select @b = @@errorselect @a = @@ROWCOUNTprint(@a)print(@b)

    返回结果:(9 row affected)

    10

    declare @a int ,@b intselect EmployeeID from employees  -- 这条SQL 语句返回9条记录select @a = @@ROWCOUNTselect @b = @@errorprint(@a)print(@b)返回结果:(9 row affected)

    90

    今天的一个Bug 就跟这个有关,找了很久,才发现是这里的原因。 SQL 说明书中写得很清楚,就是没注意。

     获取行数可以使用@@CURSOR_ROWS ,就没有这个限制了

    最新回复(0)