如果在存储过程中,我只执行一个语句select count(*) from sometable,然后从客户端(我使用C#ADO.Net SqlCommand调用存储过程),如何检索count(*)值?我正在使用SQL Server 2008。

我很困惑,因为count(*)没有用作存储过程的返回值参数。

提前致谢,
乔治

最佳答案

您可以按照Andrew的建议使用ExecuteScalar-否则您将需要稍微更改代码:

CREATE PROCEDURE dbo.CountRowsInTable(@RowCount INT OUTPUT)
AS BEGIN
  SELECT
    @RowCount = COUNT(*)
  FROM
    SomeTable
END

然后使用此ADO.NET调用来检索值:
using(SqlCommand cmdGetCount = new SqlCommand("dbo.CountRowsInTable", sqlConnection))
{
  cmdGetCount.CommandType = CommandType.StoredProcedure;

  cmdGetCount.Parameters.Add("@RowCount", SqlDbType.Int).Direction = ParameterDirection.Output;

  sqlConnection.Open();

  cmdGetCount.ExecuteNonQuery();

  int rowCount = Convert.ToInt32(cmdGetCount.Parameters["@RowCount"].Value);

  sqlConnection.Close();
}

马克

PS:但是在这个具体示例中,我想仅执行ExecuteScalar的替代方法更简单易懂。如果您需要返回多个值(例如,来自多个表等的计数),则此方法可能行得通。

10-05 21:26