當前位置:首頁 » 存儲配置 » 分頁存儲過程多表

分頁存儲過程多表

發布時間: 2022-12-20 10:44:40

1. sqlserver中帶分頁查詢的存儲過程返回怎麼是三張表,第三個表才是正確的。怎麼讓它只返回第三張表

將返回的數據表存入DataSet中,然後從DataSet中取第三張表。
DataSet ds = .....
DataTable dt = new DataTable();
dt = ds.Tables[2];

分頁還可以用:
with temp as
(select ROW_NUMBER() over( order by 排序的列名)as RowIndex,* from 表名)
select * from temp where RowIndex between 開始行 and 結束行

2. sql 分頁存儲過程多表怎麼寫

舉例:

查詢新聞和新聞分類名稱的分頁存儲過程:

CREATEPROCGetNews
(
@PageIndexINT,--分頁索引
@PageSizeINT,--每頁顯示數據條數
@AllLineINTOUTPUT--總條數
)
AS
BEGIN
SELECT*
FROM(SELECTROW_NUMBER()OVER(ORDERBYNewsOnTopTimeDESC,NewsIDDESC)ASrowindex,
a.*,
b.TypeTitle
FROMNewsa
INNERJOINdbo.NewsTypebONa.TypeId=b.TypeId
)t
WHEREt.rowindexBETWEEN@PageSize*(@PageIndex-1)+1
AND@PageSize*(@PageIndex-1)+@PageSize

SELECT@AllLine=COUNT(1)
FROMNewsa
INNERJOINdbo.NewsTypebONa.TypeId=b.TypeId
END

3. sql server 分頁存儲過程

CREATE PROCEDURE pagination
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的欄位名
@PageSize int = 10, -- 頁尺寸
@PageIndex int = 1, -- 頁碼
@doCount bit = 0, -- 返回記錄總數, 非 0 值則返回
@OrderType bit = 0, -- 設置排序類型, 非 0 值則降序
@strWhere varchar(1500) = '' -- 查詢條件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主語句
declare @strTmp varchar(110) -- 臨時變數
declare @strOrder varchar(400) -- 排序類型
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere
else
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
--以上代碼的意思是如果@doCount傳遞過來的不是0,就執行總數統計。以下的所有代碼都是@doCount為0的情況
else
begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
--如果@OrderType不是0,就執行降序,這句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder
--如果是第一頁就執行以上代碼,這樣會加快執行速度
end
else
begin
--以下代碼賦予了@strSQL以真正執行的SQL代碼
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + ']
where [' + @fldName + ']' + @strTmp + '(['+ @fldName + '])
from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + ']
from [' + @tblName + ']' + @strOrder + ')
as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + ']
where [' + @fldName + ']' + @strTmp + '([' + @fldName + '])
from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @fldName + ']
from [' + @tblName + ']
where ' + @strWhere + ' ' + @strOrder + ')
as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
exec (@strSQL)
GO

/*
-- 需要傳遞的參數
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的欄位名
@PageSize int = 10, -- 頁尺寸
@PageIndex int = 1, -- 頁碼
@doCount bit = 0, -- 返回記錄總數, 非 0 值則返回
@OrderType bit = 0, -- 設置排序類型, 非 0 值則降序
@strWhere varchar(1500) = '' -- 查詢條件 (注意: 不要加 where)
-- 調用測試

exec pagination @tblName='jobs', @strGetFields='job_id,job_desc,min_lvl,max_lvl',
@fldName='job_id',@PageSize=3,@PageIndex=1,
@doCount=0,@OrderType=1,@strWhere=''
*/
============================================

CREATE PROC SP_PageList
@tbname sysname, --要分頁顯示的表名
@FieldKey sysname, --用於定位記錄的主鍵(惟一鍵)欄位,只能是單個欄位
@PageCurrent int=1, --要顯示的頁碼
@PageSize int=10, --每頁的大小(記錄數)
@FieldShow nvarchar(1000)='', --以逗號分隔的要顯示的欄位列表,如果不指定,則顯示所有欄位
@FieldOrder nvarchar(1000)='', --以逗號分隔的排序欄位列表,可以指定在欄位後面指定DESC/ASC
--用於指定排序順序
@Where nvarchar(1000)='', --查詢條件
@RecordCount int OUTPUT, --總記錄數
@PageCount int OUTPUT --總頁數
AS
DECLARE @sql nvarchar(4000)
SET NOCOUNT ON
--檢查對象是否有效
IF OBJECT_ID(@tbname) IS NULL
BEGIN
RAISERROR(N'對象"%s"不存在',1,16,@tbname)
RETURN
END
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
RAISERROR(N'"%s"不是表、視圖或者表值函數',1,16,@tbname)
RETURN
END

--分頁欄位檢查
IF ISNULL(@FieldKey,N'')=''
BEGIN
RAISERROR(N'分頁處理需要主鍵(或者惟一鍵)',1,16)
RETURN
END

--其他參數檢查及規范
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
IF ISNULL(@FieldOrder,N'')=N''
SET @FieldOrder=N''
ELSE
SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
IF ISNULL(@Where,N'')=N''
SET @Where=N''
ELSE
SET @Where=N'WHERE ('+@Where+N')'

--如果@PageCount為NULL值,則計算總頁數(這樣設計可以只在第一次計算總頁數,以後調用時,把總頁數傳回給存儲過程,避免再次計算總頁數,對於不想計算總頁數的處理而言,可以給@PageCount賦值)
IF @PageCount IS NULL
BEGIN
SET @sql=N'SELECT @PageCount=COUNT(*)'
+N' FROM '+@tbname
+N' '+@Where
EXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUT
SET @RecordCount = @PageCount
SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
END

--計算分頁顯示的TOPN值
DECLARE @TopN varchar(20),@TopN1 varchar(20)
SELECT @TopN=@PageSize,
@TopN1=@PageCurrent*@PageSize

--第一頁直接顯示
IF @PageCurrent=1
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder)
ELSE
BEGIN
SELECT @PageCurrent=@TopN1,
@sql=N'SELECT @n=@n-1,@s=CASE WHEN @n<'+@TopN
+N' THEN @s+N'',''+QUOTENAME(RTRIM(CAST('+@FieldKey
+N' as varchar(8000))),N'''''''') ELSE N'''' END FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder
SET ROWCOUNT @PageCurrent
EXEC sp_executesql @sql,
N'@n int,@s nvarchar(4000) OUTPUT',
@PageCurrent,@sql OUTPUT
SET ROWCOUNT 0
IF @sql=N''
EXEC(N'SELECT TOP 0'
+N' '+@FieldShow
+N' FROM '+@tbname)
ELSE
BEGIN
SET @sql=STUFF(@sql,1,1,N'')
--執行查詢
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' WHERE '+@FieldKey
+N' IN('+@sql
+N') '+@FieldOrder)
END
END
GO

4. 如何寫分頁存儲過程

create proc 電影存儲過程 --翻頁存儲過程
@PageSize int, --每頁面顯示數據條數
@PageIndex int, --頁面索引
@PageCount int output, --總頁數
@名稱 nvarchar(100)
as
--查詢范圍 (@PageSize*@PageIndex+1) 起始行
-- @PageSize*(@PageIndex+1) 結束行

select * from(select Row_Number() over (order by 影片ID) as id, * from(
select * from 電影 where 名稱 like '%'+@名稱+'%' or 主演 like '%'+@名稱+'%' )a )b where id between (@PageSize*@PageIndex+1) and @PageSize*(@PageIndex+1)

--得到數據行數
select @PageCount=count(1) from 電影 where 名稱 like '%'+@名稱+'%' or 主演 like '%'+@名稱+'%'
--計算出總行數
set @PageCount= (@PageCount-1)/@PageSize+1
print @PageCount

這個是我寫過的分頁存儲過程 給你參考下啊!

5. 分頁存儲過程C# 代碼

(1)size每頁記錄數(2)currIndex當前頁(3)count總頁數

分頁的存儲過程:
alter proc Select_Contradict
@qtbid varchar(5),
@qsid varchar(5),
@cid varchar(5),
@title varchar(50),
@htime varchar(50),
@size varchar(5),
@currindex varchar(5)
as
begin
declare @str varchar(700)
declare @where varchar(700)
set @where=''
set @str='select top '+@size+' tt.* from (select qtb.name qtbname,qs.name qsname,c.* from Contradict c inner join QuestionTypeBie qtb on c.qtbid=qtb.qtbid inner join QuestionState qs on c.qsid=qs.qsid) tt where 1=1'
if(@qtbid <> 0) set @where=@where+' and tt.qtbid=convert(int,'+char(39)+@qtbid+char(39)+')'
if(@qsid <> 0) set @where=@where+' and tt.qsid=convert(int,'+@qsid+')'
if(@cid <> 0) set @where=@where+' and tt.id=convert(int,'+@cid+')'
if(@title <> '') set @where=@where+' and tt.title like '+CHAR(39)+'%'+@title+'%'+CHAR(39)
if(@htime <> '') set @where=@where+' and DATEDIFF(DD,tt.HappenTime,'+char(39)+@htime+char(39)+')=0' --以上if為查詢條件
set @currindex=@size*(@currindex-1) --篩選掉當前頁之前的記錄,因top後不能加括弧,故這樣寫
set @where=@where+' and tt.id not in(select top '+@currindex+' tt.id from (select qtb.name qtbname,qs.name qsname,c.* from Contradict c inner join QuestionTypeBie qtb on c.qtbid=qtb.qtbid inner join QuestionState qs on c.qsid=qs.qsid) tt order by tt.id)' --分頁的篩選條件
set @where=@where+' order by tt.id' --此order by 的欄位需和前面的一致,否則分頁效果不對
set @str=@str+@where
print @str
exec (@str)

end

1.select top (1)* from 表 where 條件 and id not in(select top (1)*((2)-1) id from 表 where 條件 order by 排序的欄位) order by 排序的欄位
2.在展示數據頁面添加(1)(2)(3)屬性
private int Size = 5;
public int currindex
{
set { ViewState["currindex"] = value; }
get { return Convert.ToInt32(ViewState["currindex"]); }
}
public int count
{
set { ViewState["count"] = value; }
get { return Convert.ToInt32(ViewState["count"]); }
}
3.查詢總記錄數給臨時變數temp
//總個數
private int CountTemp()
{
return new ContradictManager().GetCount();
}
4.獲取總頁數
private int CountSize()
{
return count = (CountTemp() / Size) + (CountTemp() % Size > 0 ? 1 : 0);
}
5.綁定數據,dataSource=查詢方法((1),(2))
6.設置上一頁,下一頁,(2)需要單擊時++或--,執行3,4,5,6
if((2)>=(3)) //下一頁不可用
if((2)<=1) //上一頁不可用
7.頁面首次載入事件:(2)=1;執行3,4,5,6
以上是我以前面試前總結准備的資料,按照這個流程分頁絕對能搞定,但你要是看不懂我就沒辦法了

6. 如何用存儲過程分頁數據表中的內容

這要看是在一張單表裡面分頁,還是幾張表連接後的分頁.
如果是單表的話,存儲過程用指針會簡單一點
如果是多表的話,個人認為用CTE中的with構造臨時新表,就OK啦

7. JSP中如何使用SQL存儲過程或JAVA實現分頁顯示多表查詢數據

Java調用
存儲過程

CallableStatement
proc
=
null;
proc
=
conn.prepareCall("{
call
SCOTT.TESTA(?,?)
}");
proc.setString(1,
"100");
proc.registerOutParameter(2,
Types.VARCHAR);
proc.execute();
String
testPrint
=
proc.getString(2);
第二個問號是out類型的參數
JAVA實現分頁顯示多表查詢數據?
分頁可以使用網路上提供的分頁類的做。。
至於多表查詢的數據
只是
多張表關聯在一起,跟分頁沒有太大的關系

8. 求一個sql存儲過程分頁。支持多表聯合查詢,模糊查詢!

可以加個游標 使用更方便

@PageCount bigint output,--總頁數
@Pages bigint output --當前頁
as
if @Pages<=0 --判斷頁數
set @Pages=1
declare @指針定位 bigint
set @指針定位=9*(@Pages-1)--這個是每頁10條

declare @hid bigint,--獲取定位Id 主要是用自增值判斷的
@余數 bigint--存余數 這個余數是 記錄數/10 餘下的數

select @PageCount=count(*) from [表] where [Id] = @Id
set @余數=@PageCount%10 --這里的@PageCount 是記錄總數
if @余數>0
set @PageCount=@PageCount/10+1 --這里的@PageCount是總頁數
else
set @PageCount=@PageCount/5 --這里的@PageCount是總頁數
if @Pages>@PageCount --@Pages是當前頁
set @Pages=@PageCount

declare mycur scroll cursor for
select [Id] from [表] where [Id] = @Id
open mycur
fetch absolute @指針定位 from mycur into @hid --@hid獲取定位Id
if @hid is null
set @hid=0

SELECT TOP 10 * --這里的10 是指 頁數大小
FROM 表
WHERE (Id NOT IN --------在where後面 可以加條件 如where [列1]=2 and (Id NOT IN-----
(SELECT TOP (@hid) Id
FROM 表
ORDER BY Id))
ORDER BY Id
--上面的是我根據下面的 自己改的 我也不確定速度快否 也請高手看看 不過挺好用--

SELECT TOP 頁大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP (頁大小*(頁數-1)) id
FROM 表
ORDER BY id))
ORDER BY ID
這是我自己整理的 你仔細看看 很好用的

9. 我想做個分頁存儲過程,是用sql2000,我現在需要查詢兩張表的欄位做一張分頁出來,怎麼做好呢

create proc P(@page int=1,@PageCount int=10)
as
select t1.ID,t2.Name,row=identity(int,1,1)
into #
from t1,t2
where t1.ID=t2.t1_id

create clustered index IX_#_row on #(row)

select ID,Name from # where row between (@page-1)*@PageCount+1 and @page*@PageCount
go

10. 求分頁存儲過程(SQL Server)

exec AbsolutePages 10,1,'有唯一值的列','*','表1 INNER JOIN 表2 ON 表1.欄位4=表2.欄位5 INNER JOIN 表4 ON 表1.欄位6=表4.欄位1','條件...',''

CREATE Proc AbsolutePages
(
@PageSize int=10 , --每頁顯示的記錄數
@PageCurrent int=1 , --當前要顯示的頁號
@FdName varchar(100)='' , --主鍵名或者標識列名
@SelectStr varchar(2000)='', --select子句,不包含select關鍵字,如:*或者Id,UserId,UserName等。
@FromStr varchar(1000)='', --from子句,不包含from關鍵子,如:myTable或者myTable,yourTable
@WhereStr varchar(2000)='', --Where子句,不包含where關鍵字,如空的,或者 id>2 等
@OrderByStr varchar(1000)='' --order by 子句,不包含order by 子句 ,如id desc,UserId asc 等
)
as

------------------定義局部變數------------------
declare @Id1 varchar(20),@Id2 varchar(20) --開始和結束的記錄號
declare @OrderBySqls varchar(1000) --order by 子句
declare @WhereSqls varchar(2000) --where 子句
declare @Sqls nvarchar(4000) --最終組合成的Sqls語句
declare @TmpStr varchar(2000) --臨時語句
------------
if @WhereStr <> ''
set @WhereSqls = ' where ('+@WhereStr+')'
else
set @WhereSqls = ''
------------
if @OrderByStr <> ''
set @OrderBySqls = ' order by '+@OrderByStr
else
set @OrderBySqls = ''
------------
set @TmpStr = @WhereSqls
------------------如果顯示第一頁,可以直接用top來完成------------------
if @PageCurrent <= 1
begin
select @Id1 = convert(varchar(20),@PageSize)
set @Sqls = 'select top ' + @Id1 + ' ' + @SelectStr + ' from ' + @FromStr + @WhereSqls + @OrderBySqls
exec (@Sqls)
end
else
begin
select @Id1=convert(varchar(20),@PageSize),@Id2=convert(varchar(20),(@PageCurrent-1)*@PageSize)
if @WhereSqls <> ''
set @WhereSqls = @WhereSqls + ' and (' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+'))'
else
set @WhereSqls = ' where ' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+')'
----------
set @Sqls = 'select top '+@Id1+ ' '+ @SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls
exec (@Sqls)
end
print @Sqls
GO

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:600
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:892
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:585
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:769
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:689
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1016
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:261
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:119
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:809
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:718