2011-05-26 62 views
2

我有一個存儲過程,我已經通過NHibernate映射。 Sproc返回結果集和輸出參數,基本上是結果集本身後面的總記錄數。這樣的事情:NHibernate - 從映射的存儲過程返回輸出參數

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 

我正在實施分頁通過一個超級計算機,因此需要獲得記錄總數。查詢對於多個表中的連接非常複雜,可能非常緩慢,因此需要直接編寫T-SQL進行關注,微調和優化。

我的問題是我無法獲取Sproc中的OUTPUT參數(@TotalRecords)。我已經映射到這個存儲過程像這樣:

<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輸出參數?

回答

2
+0

噢人,這太差勁了!我想我可以將它分成兩個Sprocs,或者只是在代碼中執行LINQ/HQL中的計數。雖然保持計數和查詢在一個Sproc中的好處是,如果WHERE子句更改,則需要更改計數和查詢。 – 2011-05-26 12:36:41

+0

@matheiu其中一個鏈接已經損壞。你可能想編輯你的答案,以包含一些突出的信息,否則有人可能[將其標記爲非答案](http://meta.stackexchange.com/questions/92505/should-i-flag-answers-which-包含只-A-鏈接爲 - 不的回答) – 2012-02-22 19:30:08

相關問題