2012-02-05 78 views
0

我有叫usp_getTotalOrder一个存储过程,它看起来像如何在sql中知道总记录返回存储过程?

Select * from Order where CompanyID = 1; 

现在,我有一个包含存储过程的名称表。

在我的BLL中,我有一个存储过程名称。我想创建包含一个参数StoredProcedureName函数,并返回总的行数是一样

Declare @str varchar(50) 
Set @str='GetOrders'; // Stored Procedure Name 
Exec @str 

但它不返回,我想从存储过程来获得其函数名总行数。

任何想法? 请帮忙.....

+0

我想统计存储过程返回的记录。 语法不成问题。 – 2012-02-05 21:55:15

回答

5

看看@@ROWCOUNT

http://technet.microsoft.com/en-us/library/ms187316.aspx

你也许能够使用的东西,如:

Declare @str varchar(50) 
Set @str='GetOrders'; // Stored Procedure Name 
Exec @str 
SELECT @@ROWCOUNT 
+0

这工作完美。 – ErikE 2012-02-05 23:28:23

+0

你如何用存储过程参数做到这一点? – Ally 2012-12-12 15:58:57

+0

@Ally我没有跟随你想要做的事情。你是否试图在存储过程中将行计数作为输出参数返回?如果是这样,假设您的参数名为'@ rowCount'。然后在你的存储过程结束时,你会做'SELECT @rowCount = @@ ROWCOUNT' – csm8118 2012-12-13 17:58:36

1

您是否想从sproc中计算结果集中的行数? 在这种情况下,你可以这样做:

INSERT INTO #Orders 
Exec @str 

SELECT COUNT(*) 
FROM #Orders 

,或者您可以使用表变量来代替临时表。

1

可以通过输出参数或者返回值从SP返回的行数。当然,您必须将该输出参数添加到SP中,并在SP中将其设置为COUNT(*)。

DECLARE @o_count INT 

EXEC GetOrder @o_count = @count OUT 
+0

请注意,在读取由proc返回的行集合中的所有行之前,您不能使用输出参数 - 除了行之外,使rowcount作为输出参数基本没有意义。 – 2012-02-05 22:30:11

+0

您可以计算SP查询中的行数。 – pistipanko 2012-02-05 22:56:05

+0

如果您返回一个行集合或集合并将计数放入输出变量中,您将无法进入计数输出变量,直到消耗完所有行后,使其通常毫无意义。 http://msdn.microsoft.com/en-us/library/ms971497.aspx#gazoutas_topic6解决方法是在第一个行集中返回计数,而不是作为输出变量。 – 2012-02-05 23:25:32