========= 关于@@rowcount =========

愚者只看星不看答案 2016-11-03 03:20:30



begin try
insert into table(fieldName) values(fieldValue);
return @@rowcount;
end try

begin catch
return -255;
end catch



假设上面的insert语句执行时,没有发现任何异常(也就是不会走到 catch 中),请问,有没有任何情况下,这个insert语句执行后,
@@rowcount 值为0的可能?
正常情况下,这个@@rowcount 应该返回1,我需要在应用程序中判断当@@rowcount的值为1时认为插入成功。多谢。
...全文
100 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
@wmxcn2000 @roy_88 感谢回复。。。 @roy_88 感谢你指出我的错误。多谢。。。 你说的insert select 这种情况的确返回0。。感激。。。
中国风 2016-11-03
  • 打赏
  • 举报
回复
@@rowcount 值为0的可能? ----------- 没插入数据且没报错的情况下显示为0,插入时在触发器或唯一索引过滤了错误,不抛出错误的情况,插入时判断条件不成立 如: insert into table(fieldName) select 'fieldValue' where 1=0; ------------- 在catch中 定义return(如:定义抛出错误信息),在做嵌套事务时,比如:存储过程引用存储过程时没法同时获取值或错误信息 建议把RETURN放在结尾
中国风 2016-11-03
  • 打赏
  • 举报
回复
这样用 RETURN

DECLARE @Flag INT
begin try
		insert into table(fieldName) values(fieldValue);
		SET @Flag=0
end try

begin catch
		SET @Flag= -255;
end CATCH
RETURN @Flag
卖水果的net 版主 2016-11-03
  • 打赏
  • 举报
回复

-- 不会的,不建议把这个放在一个过程中

create table test(id int)
go
create proc pr1
as 
begin
    begin try
		    insert into test(id) values(100);
		    return @@rowcount;
    end try

    begin catch
		    return -255;
    end catch
end
go
declare @ret int 
exec @ret = pr1
print @ret 
go
drop proc pr1 
go
drop table test 
go


1

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧