【发布时间】:2011-05-26 12:23:08
【问题描述】:
我有一个通过 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 输出参数呢?
【问题讨论】:
标签: nhibernate stored-procedures nhibernate-mapping