У меня есть хранимая процедура, которую я сопоставил через 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 напрямую.
Моя проблема в том, что я не могу получить в OUTPUTпараметр в Sproc (@TotalRecords).Я сопоставил этот 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?