如果在存储过程中,我只执行一个语句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
的替代方法更简单易懂。如果您需要返回多个值(例如,来自多个表等的计数),则此方法可能行得通。