ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 来自另一个存储过程的存储过程的行计数

2019-07-03 23:54:46  阅读:220  来源: 互联网

标签:c sql stored-procedures executenonquery rowcount


我有各种存储过程.我需要一个存储过程来执行存储过程,然后只返回行计数(被调用过程返回的行数),我需要用c#代码接收它.

最好的方法是什么?

情况:
我有各种存储过程,从c#代码调用.现在为了另一个目的,我需要知道一个过程返回的行数(我不想要返回的行,我只需要行数).我无法更改存储过程本身,因为我的许多c#代码正在使用它们,因此如果我更改过程,事情可能会中断.这就是为什么我要锁定一个过程,它将接受输入并执行一个过程(动态)并返回行数但不返回结果或行.

我可以采用存储过程字符串
并执行它

EXEC ('StoredProcedure @Keyword = ''' + @Key + '''')

我在每个可能返回的行中都有Id作为列.我可以存储ID并计算它但我不知道如果这是最好的主意.

我的数据库非常大.我可以在c#中使用executenonquery()但是当我用它执行任何存储过程时它返回-1.什么是最好的方式.谢谢.

解决方法:

假设您正在使用SQL Server(可以从代码片段中使用),也许这样的东西对您有用:

exec('exec <your stored procedure goes here>; select @@RowCount')

由于您运行的是SQL Server,我可以想到一个不一定漂亮的解决方案.

创建一个临时表(如果您有更新版本的SQL Server,则为表变量).然后执行:

exec(`
declare @t table (
   <columns go here>
);

insert into @t
    exec(''<your exec here>'');

select @rowcount
');

现在我已经说过,我会推荐sp_executesql.这是这样的:

declare @sql nvarchar(max) = N'exec '+@YOURQUERY + '; set @RowCount = @@RowCount';

exec sp_executesql @sql, N'@RowCount int output', @RowCount = RowCount output;

我昨天花了大部分时间来调试在插入内部调用存储过程时出现的神秘条件.

标签:c,sql,stored-procedures,executenonquery,rowcount
来源: https://codeday.me/bug/20190703/1371589.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有