【问题标题】:How to know total record return stored procedure in sql?如何知道sql中的总记录返回存储过程?
【发布时间】:2012-02-27 12:42:24
【问题描述】:

我有一个名为 usp_getTotalOrder 的存储过程,看起来像

Select * from Order where CompanyID = 1;

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

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

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

但它不会返回我想从存储过程中获取的总行数,并在函数中使用其名称。

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

【问题讨论】:

  • 我要统计存储过程返回的记录。语法不是问题。

标签: sql sql-server


【解决方案1】:

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

DECLARE @o_count INT

EXEC GetOrder @o_count = @count OUT

【讨论】:

  • 请注意,在读取 proc 返回的行集中的所有行之前,您不能使用输出参数 - 除了行之外,行数基本上没有意义。
  • 可以统计SP查询中的行数。
  • 如果您返回一个或多个行集并将计数放入输出变量中,则在消耗所有行之前,您无法访问计数输出变量,这通常毫无意义。 msdn.microsoft.com/en-us/library/ms971497.aspx#gazoutas_topic6 一种解决方法是在第一个行集中返回计数,而不是作为输出变量。
  • OK 比看看这个例子:CREATE PROCEDURE [dbo].[GetOrder] ( @o_totalRowCount BIGINT = NULL OUTPUT ) AS SELECT * FROM Orders SET @o_totalRowCount = @@ROWCOUNT RETURN
  • 在读取整个行集并在数据读取器上调用 .NextResult 之前,您无法获取输出参数(来自 ADO.NET)。我刚刚重新验证了这一点。
【解决方案2】:

看看@@ROWCOUNT

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

你也许可以使用类似的东西:

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

【讨论】:

  • 你如何使用存储过程参数来做到这一点?
  • @Ally 我没有关注你想要做的事情。您是否尝试在存储过程中将行数​​作为输出参数返回?如果是这样,假设您的参数名为@rowCount。然后在你的存储过程结束时你会做SELECT @rowCount=@@ROWCOUNT
  • 抱歉不清楚。使用您的示例,我遇到了 GetOrders 存储过程需要与它一起传递参数的情况。但是因为您将其设置为字符串,所以我不知道该怎么做。
  • @Ally,啊,我明白你现在在说什么。几个选项:1:SET @str='GetOrders' EXEC @str @param1, @param2 2:DECLARE @str NVARCHAR(256) SET @str='EXEC GetOrders @param1' EXEC sp_executesql @str,N'@param1 INT',@param1' 希望这是有道理的。在这些情况下,我倾向于使用sp_executesql 而不是EXECstackoverflow.com/questions/803211/…
  • 这很有帮助。谢谢。
【解决方案3】:

您想从存储过程中计算结果集中的行数吗? 在这种情况下,您可以这样做:

INSERT INTO #Orders
Exec @str

SELECT COUNT(*)
FROM #Orders

或者您可以使用 Table 变量而不是临时表。

【讨论】:

    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2017-05-06
    • 1970-01-01
    相关资源
    最近更新 更多