當前位置:首頁 » 編程語言 » 執行動態sql獲取分頁記錄
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

執行動態sql獲取分頁記錄

發布時間: 2022-05-24 01:58:03

『壹』 mysql資料庫動態分頁的sql語句

sql語句是通用的
select * from mytable1 where 1 order by id desc limit 0,10
作用是倒序,取最前10條記錄,也就是第一頁
取第二頁可以是這樣的limit 10,10
自已修改著用吧

『貳』 請問,如何用一條SQL查詢出分頁的數據和總記錄數啊MySQL的!不用存儲

的確要查詢兩次的,因為計算總記錄數是使用的聚合函數count(),如果你想一起查詢出來,就要使用分組,那樣也麻煩,對資料庫的操作要使用細粒度的操作,可以使用事務來控制兩次查詢,用同一個connection,這樣可以避免兩次查詢導致兩次不同進程之間的連接操作

『叄』 用SQL語句怎麼實現資料庫分頁

CREATE
PROC
sp_PageView
@tbname
sysname,
--要分頁顯示的表名
@FieldKey
nvarchar(1000),
--用於定位記錄的主鍵(惟一鍵)欄位,可以是逗號分隔的多個欄位
@PageCurrent
int=1,
--要顯示的頁碼
@PageSize
int=10,
--每頁的大小(記錄數)
@FieldShow
nvarchar(1000)='',
--以逗號分隔的要顯示的欄位列表,如果不指定,則顯示所有欄位
@FieldOrder
nvarchar(1000)='',
--以逗號分隔的排序欄位列表,可以指定在欄位後面指定DESC/ASC用於指定排序順序
@Where
nvarchar(1000)='',
--查詢條件
@PageCount
int
OUTPUT
--總頁數
AS
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
DECLARE
@sql
nvarchar(4000)
SET
@sql=N'SELECT
@PageCount=COUNT(*)'
+N'
FROM
'+@tbname
+N'
'+@Where
EXEC
sp_executesql
@sql,N'@PageCount
int
OUTPUT',@PageCount
OUTPUT
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
--生成主鍵(惟一鍵)處理條件
DECLARE
@Where1
nvarchar(4000),@s
nvarchar(1000)
SELECT
@Where1=N'',@s=@FieldKey
WHILE
CHARINDEX(N',',@s)>0
SELECT
@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
@Where1=@Where1
+N'
AND
a.'+LEFT(@s,CHARINDEX(N',',@s)-1)
+N'='+LEFT(@s,CHARINDEX(N',',@s)-1)
SELECT
@Where1=STUFF(@Where1+N'
AND
a.'+@s+N'='+@s,1,5,N''),
@TopN=@TopN1-@PageSize
--執行查詢
EXEC(N'SET
ROWCOUNT
'+@TopN1
+N'
SELECT
'+@FieldKey
+N'
INTO
#
FROM
'+@tbname
+N'
'+@Where
+N'
'+@FieldOrder
+N'
SET
ROWCOUNT
'+@TopN
+N'
DELETE
FROM
#'
+N'
SELECT
'+@FieldShow
+N'
FROM
'+@tbname
+N'
a
WHERE
EXISTS(SELECT
*
FROM
#
WHERE
'+@Where1
+N')
'+@FieldOrder)
END

『肆』 SQL Server資料庫用sql語句實現分頁查詢 (從M條數據開始,查找N條記錄。sqlserver資料庫。請舉例說明。)

1:新建一個資料庫
create database 資料庫名
2:新建一個表
create table 表名
(
欄位名 類型 是否為空
)
3:刪除一個表
drop table 表名
4:增加一個記錄
insert 表名 [(欄位)] values ( 內容 )
5:刪除一個記錄
delete [from] 表名 where 條件
6、修改一個記錄
update 表名 set 欄位名=更新內容 where 條件
7、在原表中增加一個欄位
alter table 表名 add column 欄位名 類型
8:在原表中刪除一個欄位
alter table 表名 drop column 欄位名
9、查詢一個表記錄
select * from 表名
10、帶條件查詢一個表記錄
select * from 表名 where =條件

『伍』 如何使用sql語句進行分頁操作

sql語句是不能進行分頁操作的,它只查出一個相應條件的數據記錄集。而分頁操作,是由程序員用相應的軟體開發語言設計演算法,而過進行分頁操作。謝謝

『陸』 sql語句查詢加分頁

你的意思是前五行是固定的,後十行進行分頁是么,前五行固定寫死,後十行用參數或動態sql來進行分頁。例如第一頁:
select top 5 id,readcount,weight from table1 order by readcount desc
union all
select top 10,id,readcount,weight from table1 order by weight desc --這句進行動態sql或傳參數進行分頁,網上分頁的sql很多。有問題再追問。

『柒』 如何用sql語句 實現分頁查詢

適用於 SQL Server 2000/2005

SELECT TOP 頁大小 *

FROM table1

WHERE id NOT IN

SELECT TOP 頁大小*(頁數-1) id FROM table1 ORDER BY id

『捌』 SQL如何實現數據分頁,要具體語句,謝謝

可以的,用存儲過程

分頁存儲過程如下

CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@RetColumns varchar(1000) = '*', -- 需要返回的列,默認為全部
@Orderfld varchar(255), -- 排序欄位名
@PageSize int = 10, -- 頁尺寸
@PageIndex int = 1, -- 頁碼
@IsCount bit = 0, -- 返回記錄總數, 非 0 值則返回
@OrderType varchar(50) = 'asc', -- 設置排序類型, 非 asc 值則降序
@strWhere varchar(1000) = '' -- 查詢條件 (注意: 不要加 where)
AS

declare @strSQL varchar(1000) -- 主語句
declare @strTmp varchar(300) -- 臨時變數
declare @strOrder varchar(400) -- 排序類型

if @IsCount != 0 --執行總數統計

begin
if @strWhere != ''
set @strSQL = "select count(*) as Total from [" + @tblName + "] where " + @strWhere
else
set @strSQL = "select count(*) as Total from [" + @tblName + "]"
end

else --執行查詢操作

begin

if @OrderType != 'asc'
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @Orderfld +"] desc"
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @Orderfld +"] asc"
end

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrder

if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "] where (" + @strWhere + ") "
+ @strOrder + ") as tblTmp) and (" + @strWhere + ") " + @strOrder

if @PageIndex = 1
begin
set @strTmp = ""
if @strWhere != ''
set @strTmp = " where (" + @strWhere + ")"

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
end
end

exec (@strSQL)

『玖』 如何通過執行動態sql獲取分頁需要的總記錄數

�衷詰奈侍餼凸榻嵩謖餉窗鴉袢∽薌鍬擠禱氐醬媧⒐�痰氖涑霾問�小O衷詡虻ヌ�隹突П斫峁梗� 接著貼出我的存儲過程: Create proc [dbo].[Get_Customer] @type varchar(1000), @pageIndex int, @pageSize int, @RecordCount int outputasdeclare @beginIndex int declare @endIndex int declare @sql Nvarchar(max)注意這里定義的是Unicode變數 set @beginIndex=(@pageIndex-1)*@pageSize+1 set @endIndex=@pageIndex*@pageSize set @sql=' IF OBJECT_ID(''tempdb..#temp'') IS NOT NULL DROP TABLE #temp select ROW_NUMBER() over (order by c.Id) as id,CustomNO,Name,Phone,Email,Type into #temp from Customer ' if(@type is not null) set @sql=@sql+'where type='''+@type+'' set @sql=@sql+' select @p=COUNT(*) from #temp select * from #temp where #temp.rowNum between ' + cast(@beginIndex as varchar(10))+' and '+ cast(@endIndex as varchar(10)) --使用EXECUTE直接執行獲取不到總記錄數 --EXECUTE (@sql) --使用EXECUTE執行sp_executesql存儲過程才能獲取到EXECUTE sp_executesql @sql,N'@p AS INT OUTPUT',@p=@RecordCount Output 其實以上兩種執行的方式差別就是:一種是執行一個動態的批處理,另一種是執行一個存儲過程 sp_executesql命令,因為它提供一個介面,該介面及支持輸入參數也支持輸出參數。這功能使你可以創建帶參數的查詢字元串,這樣就可以比EXEC更好的重用執行計劃,sp_executesql的構成與存儲過程非常相似,不同之處在於你是動態構建代碼。通過上面的列子的話可以看見直接執行批處理時獲取不到動態語句裡面的總記錄數的。 構造動態sql的where子句,也就是條件子句時,exec無法使用變數來進行佔位,需要將變數轉換成字元串,然後和動態sql進行拼接,這就可能引起Sql注入問題,而通過sp_executesql就不會有這個問題 比如上面的存儲過程可以按一下方式修改執行修改一: set @sql=@sql+'where type='''+@type+''改為: set @sql=@sql+'where type=@typ' 修改二 --使用EXECUTE執行sp_executesql存儲過程才能獲取到 EXECUTE sp_executesql @sql,N'@p AS INT OUTPUT',@p=@RecordCount Output 改為 --使用EXECUTE執行sp_executesql存儲過程才能獲取到 EXECUTE sp_executesql @sql,N'@typ Nvarchar(50),@p AS INT OUTPUT',@typ=@type @p=@RecordCount Output 至於sp_executesql更詳細的語法及使用方式請參考其它資料,或者直接打開資料庫然後按F1尋求幫助 嘿嘿!! ,本站保留追究責任的權利。

『拾』 一條sql語句實現分頁查詢,且能返回記錄總數

select *,(select count(*) from t1) from(
select top 2 * from(
select top 4 * from(
select * from t1
)as ttb0 order by id
)as ttb1 order by id desc
)as ttb2 order by id
在select後加個子查詢就OK了,