一个有意思的存储过程,点击帮忙参谋下

cnuusw 2010-01-12 11:47:19

ALTER PROCEDURE [dbo].[YingKe_Accounts_SetRolePermission]
@id int,
@permission nvarchar (4000)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
if exists(select RoleID from RolesPermissions where RoleID=@id)
begin
update RolesPermissions set PermissionID=@permission where RoleID=@id
end

else
begin
insert into RolesPermissions (RoleID,PermissionID) values (@id,@permission)
end
END


如上过程,用ExecuteNonQuery为什么会返回-1呢?我感觉这个过程最终执行的sql不是insert就是update 应该是1才对。哪位朋友帮忙解释下。

ps:ExecuteNonQuery 不返回任何行数据,但映射到参数的任何输出参数或返回值都会用数据进行填充。
对于查询更新删除操作 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。
对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1

这句话理解不透,呵呵。
...全文
50 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
huming_h 2010-01-12
  • 打赏
  • 举报
回复
对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。

是说对于select类型的操作,返回为-1,或者出现错误回滚,也返回-1
huming_h 2010-01-12
  • 打赏
  • 举报
回复
默认的 Set Nocount off 是开启的,如果写了 set nocount on 这样导致无法返回整个存储过程执行后的结果,直接删除set nocount on使用默认情况的下设置,即能返回显示影响的行数.
对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。

62,264

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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