问题描述
||
我有一个通过NHibernate映射的存储过程。 Sproc返回结果集和输出参数,基本上是总记录数,然后是结果集本身。像这样:
CREATE PROCEDURE [dbo].[mySproc]
(
@StartRecord INT = 1,@EndRecord INT = 10,@TotalRecords INT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON
// Do a count
SELECT @TotalRecords = COUNT(disTINCT x.Id)
FROM Blah ...snip
// Perform a query with paging
SELECT
x.Id,x.Column1
FROM ...some really complex query that uses paging
END
我正在通过Sproc实现分页,因此需要获取记录总数。查询非常复杂,跨多个表的连接可能很慢,因此需要直接编写T-sql进行仔细的调整和优化。
我的问题是我无法获得Sproc(@TotalRecords)中的OUTPUT参数。我已经像这样映射了该Sproc:
<class name=\"MyLibrary.someClass,MyLibrary\">
<id name=\"Id\" type=\"Int32\" />
<property name=\"Column1\" type=\"String\" length=\"50\" not-null=\"false\" />
</class>
<sql-query name=\"mySproc\">
<return class=\"MyLibrary.someClass,MyLibrary\">
<return-property name=\"Id\" column=\"Id\"/>
<return-property name=\"Column1\" column=\"Column1\"/>
</return>
EXEC mySproc
@StartRecord = :startRecord,@EndRecord = :endRecord,@TotalRecords = 0
</sql-query>
我可以这样得到结果集:
IList<SomeClass> records = Session.GetNamedQuery(\"mySproc\")
.SetParameter(\"startRecord\",1,NHibernateUtil.Int32)
.SetParameter(\"endRecord\",20,NHibernateUtil.Int32)
.List<SomeClass>();
但是,如何获取@TotalRecords输出参数?
解决方法
似乎无法直接完成:
http://osdir.com/ml/nhusers/2010-01/msg00794.html
http://www.richter-web.info/Wordpress/?p=132