我有這樣的存盤程序:
create procedure sp_testsp
(
@vc_order_by varchar(100),
@int_start_index INT,
@int_grid_size INT,
@count bigint output
)
as
begin
select * from
(select ROW_NUMBER() over
(order by
case @vc_order_by = '' then tab1.int_id end desc) AS row,
*,
COUNT(tab1.int_id) OVER() as totalRowCount
from
(select * from tbl_test) tab1) tab2
where row BETWEEN CONVERT(VARCHAR, @int_start_index) and CONVERT(VARCHAR,(@int_start_index-1) @int_grid_size);
set @count = 0;
end
我們可以通過以下方式執行上面的存盤程序:
DECLARE @size bigint;
EXEC sp_testsp '', 1,5, @size output;
SELECT @size;
寫入的 sp 提供基于分頁的資料,我們可以通過在 @int_grid_size 中傳遞一個數字來檢索 100 或任意數量的記錄。
表輸出如下所示:
row int_id vc_name totalRowCount
1 5 a 107
2 6 ab 107
3 7 abc 107
4 8 abcd 107
5 10 abcc 107
如果我們使用 where 條件,最后一列給出表的總記錄數或總記錄數。
我想輸出存盤程序中“@count”中 totalRowCount 的任何一列值。
我不能使用@@ROWCOUNT,因為它只發送 sp 輸出的記錄計數,即在這種情況下為 5,但實際記錄為 107。
只是想知道有沒有什么辦法。任何幫助是appercitated。謝謝。
編輯:
我試過這樣的事情,它的作業原理:
create procedure sp_testsp
@param1 nvarchar(800),
@count bigint output
as
begin
select * from tbl_test tt where tt.col1 = @param1;
set @count = select Count(*) from tbl_test tt where tt.col1 = @param1;
end
問題是我必須呼叫一次查詢,然后再次為@count 呼叫查詢。這是有效的,但需要大量時間進行大查詢。
uj5u.com熱心網友回復:
你可以通過臨時表來做到這一點
select * into #temp from
(select ROW_NUMBER() over
(order by
case @vc_order_by = '' then tab1.int_id end desc) AS row,
*,
COUNT(tab1.int_id) OVER() as totalRowCount
from
(select * from tbl_test) tab1) tab2
where row BETWEEN CONVERT(VARCHAR, @int_start_index) and CONVERT(VARCHAR,(@int_start_index-1) @int_grid_size);
select top 1 @count=totalRowCount from #temp
select * from #temp --you can exclude totalRowCount
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/395960.html
標籤:sql sql-server
上一篇:如何使用while回圈更新行?
