SQL Server 分页查询通用存储过程(只做分页查询用)
SQL Server 分页查询通用存储过程(只做分页查询用)
这段存储过程写得SQL代码很不错,在这个基础上,按照我的习惯以及思维方式,调整了代码,只做分页查询用
自开始做项目以来,一直在用。这段存储过程的的原创者(SORRY,忘记名字了),写得这段SQL代码很不错,我在这个基础上,按照我的习惯以及思维方式,调整了代码,只
做分页查询用。
/*----------------------------------------------
*procedure name : P_PageResult
* author :Fay
* create date : 2014-07-18
*/
CREATE PROCEDURE prcPageResult
-- 获得某一页的数据 --
@currPage int = 1, --当前页页码 (即Top currPage)
@showColumn varchar(2000) = '*', --需要得到的字段 (即 column1,column2,......)
@tabName varchar(2000), --需要查看的表名 (即 from table_name)
@strCondition varchar(2000) = '', --查询条件 (即 where condition......) 不用加where
关键字
@ascColumn varchar(100) = '', --排序的字段名 (即 order by column asc/desc)
@bitOrderType bit = 0, --排序的类型 (0为升序,1为降序)
@pkColumn varchar(50) = '', --
主键名称
@pageSize int = 20 --
分页大小
AS
BEGIN --
存储过程开始
-- 该存储过程需要用到的几个变量 --
DECLARE @strTemp varchar(1000)
DECLARE @strSql varchar(4000) --
该存储过程最后执行的语句
DECLARE @strOrderType varchar(1000) --排序类型语句 (order by column asc或者order by column desc)
BEGIN
IF @bitOrderType = 1 -- bitOrderType=1
即执行降序
BEGIN
SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'
SET @strTemp = '<(SELECT min'
END
ELSE
BEGIN
SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'
SET @strTemp = '>(SELECT max'
END
IF @currPage = 1 --
如果是第一页
BEGIN
IF @strCondition != ''
SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
' WHERE '+@strCondition+@strOrderType
ELSE
SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+@strOrderType
END
ELSE --
其他页
BEGIN
IF @strCondition !=''
SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+
' '+@pkColumn+' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
ELSE
SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+
' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
END
END
EXEC (@strSql)
END --
存储过程结束
------------------------------------------------
GO
调用方法:
prcPageResult 1,'*','TableName','','CreateDate',1,'PkID',25
上面表示,查询表TableName的所有字段,前25条记录,因为是第一页,排序字段为CreateDate,降序排列,主键是PkID。这个存储过程的功能比较强大,用在项目中非常的适
用。不信您可以试试看,尤其是在百万级数据上,他的优势就显露无疑了,当然,这段代码是可以转换成MySql中的存储过程的,不过,在这里就不给大家了,你们可以自己试着
转换看看。
下面的存储过程查询表的记录数:
/*----------------------------------------------
*procedure name : prcRowsCount
* author :Fay
* create date : 2014-07-18
*/
CREATE PROC prcRowsCount
@tabName varchar(200), --
需要查询的表名
@colName varchar(200)='*', --
需要查询的列名
@condition varchar(200)='' --
查询条件
AS
BEGIN
DECLARE @strSql varchar(255)
IF @condition = ''
SET @strSql='select count('+@colName+') from '+@tabName
ELSE
SET @strSql='select count('+@colName+') from '+@tabName+' where '+@condition
EXEC (@strSql)
END
------------------------------------------------
GO
还有删除记录的通用存储过程和查询单条记录的通用存储过程在这里就不奉送了,感谢提供原通用分页查询存储过程的哥们,谢谢。
您可能感兴趣的文章
:
oracle,mysql,SqlServer
三种数据库的分页查询的实例
数据库分页查询方法
mysql分页原理和高效率的mysql
分页查询语句
Mysql
中分页查询的两个解决方法比较
高效的SQLSERVER分页查询(推荐
)
真正高效的SQLSERVER分页查询(多种方案
)
三种SQL分页查询的存储过程代码
php下巧用select语句实现mysql
分页查询
SQL Server
分页查询存储过程代码
数据库分页查询语句数据库查询
SQL Server 2005数据库简明教程-第8章 存储过程的操作与管理
图8-3 查看存储过程
8.2.1 查看存储过程
(2)使用系统存储过程来查看用户创建的存储过程 。
可供使用的系统存储过程及其语法形式如下: •sp_help,用于显示存储过程的参数及其数据类型,其语法为: sp_help [[@objname=] name],参数name为要查看的存储过程的名称。 •sp_helptext,用于显示存储过程的源代码,其语法为: sp_helptext [[@objname=] name],参数name为要查看的存储过程的名称。 •sp_depends,用于显示和存储过程相关的数据库对象,其语法为: sp_depends [@objname=]’object’,参数object为要查看依赖关系的存储过程 的名称。 •sp_stored_procedures,用于返回当前数据库中的存储过程列表,其语法为: sp_stored_procedures[[@sp_name=]'name'] [,[@sp_owner=]'owner'] [,[@sp_qualifier =] 'qualifier'] 其中,[@sp_name =] 'name' 用于指定返回目录信息的过程名;[@sp_owner =] 'owner' 用于指定过程所有者的名称;[@qualifier =] 'qualifier' 用于指定过程 限定符的名称。
8.2查看、修改和删除存储过程
8.2.1 查看存储过程 8.2.2 修改存储过程
8.2.3 重命名和删除存储过程
8.2.1 查看存储过程
(1)使用SQL Server管理平台查看用户创建的存储过程。 在SQL Server管理平台中,展开指定的服务器和数据库,选择并依次展开“程序→存储 过程”,然后右击要查看的存储过程名称,如图8-3所示,从弹出的快捷菜单中,选择 “创建存储过程脚本为→CREATE到→新查询编辑器窗口”,则可以看到存储过程的源 代码。
sqlserver order by用法
一、SQL Server Order By 介绍在 SQL Server 中,Order By 语句用于对查询结果进行排序。
它基于一个或多个列的值对结果集进行排序,并且可以指定升序或降序排序顺序。
Order By 语句通常用于 Select 语句的末尾,以便按照特定的顺序返回数据。
在本篇文章中,我们将详细探讨 SQL Server Order By 的用法及注意事项。
二、基本语法Order By 语句的基本语法如下:```sqlSELECT column1, column2, ...FROM table_nameORDER BY column1, column2, ... ASC|DESC;```其中,column1, column2, ... 用于指定需要排序的列,table_name 是需要查询的表名,ASC 和 DESC 分别表示升序和降序排序。
如果不指定排序顺序,默认情况下为升序(ASC)。
三、单列排序如果只需要按照单个列进行排序,可以简单地在 Order By 语句中指定列名和排序顺序,例如:```sqlSELECT *FROM employeesORDER BY last_name ASC;```上述示例中,我们使用 Order By 对 employees 表中的 last_name 列进行升序排序。
四、多列排序除了单列排序之外,Order By 也支持对多个列进行排序。
在指定多个排序列时,SQL Server 首先根据第一个指定的列进行排序,然后再按照第二个列进行排序,以此类推。
示例如下:```sqlSELECT *FROM employeesORDER BY department_id ASC, last_name DESC;```上述示例中,我们首先按照 department_id 进行升序排序,然后在每个部门内再按照 last_name 进行降序排序。
五、注意事项1. Null 值排序:在 SQL Server 中,默认情况下,Null 值会被排在排序结果的末尾。
sql分页原理
SQL分页原理一、什么是分页在数据库查询中,当数据量过大,不适合一次性返回所有结果时,我们需要使用分页技术。
分页即将大量数据分成若干个页面显示,用户可以通过翻页操作来浏览全部数据。
二、分页的应用场景分页主要用于以下场景:1.数据量过大,一次性返回所有数据会导致性能问题;2.用户需要通过翻页来查看更多数据;3.对数据进行批量处理时需要按页进行操作。
三、常见的分页技术在SQL中,常见的分页技术有两种:基于物理分页和基于逻辑分页。
1. 基于物理分页基于物理分页是指在数据库层面进行分页,对查询结果集进行切割,只返回指定页码的数据。
常用的物理分页方法有LIMIT-OFFSET和ROWNUM。
1.1 LIMIT-OFFSETLIMIT-OFFSET是一种常见的分页技术,它通过LIMIT关键字指定每页返回的记录数,通过OFFSET关键字指定起始位置(偏移量)。
例如,假设每页显示10条数据,我们要获取第3页的数据,可以使用以下SQL语句:SELECT * FROM table_name LIMIT 10 OFFSET 20;上述语句表示从table_name表中跳过前20条记录,返回接下来的10条记录,即第3页的数据。
1.2 ROWNUM在Oracle数据库中,可以使用ROWNUM关键字进行物理分页。
ROWNUM是Oracle特有的伪列,表示返回的结果集中每个记录的行号。
通过设置ROWNUM的范围来实现分页效果。
例如,假设每页显示10条数据,我们要获取第3页的数据,可以使用以下SQL语句:SELECT * FROM (SELECT ROWNUM RN, t.* FROM table_name t) WHERE RN BETWEEN 21 AND 30;上述语句表示使用内层查询给每条记录增加了一个行号RN,并筛选出行号在指定范围内的记录,即第3页的数据。
2. 基于逻辑分页基于逻辑分页是指在查询结果集返回后,在应用程序中进行分页,根据需求取出相应页码的数据。
sqlserver next 用法
sqlserver next 用法
在SQL Server中,NEXT关键字用于从一个查询中获取下一行。
它常用于结合FETCH语句一起使用,用于分页查询或游标操作。
以下是NEXT关键字的用法示例:
1. 用于游标操作:
```sql
DECLARE @MyCursor CURSOR;
SET @MyCursor = CURSOR FOR
SELECT column1, column2
FROM table1;
OPEN @MyCursor;
FETCH NEXT FROM @MyCursor;
...
CLOSE @MyCursor;
```
在这个示例中,我们声明一个游标并将其设置为一个查询结果集。
然后,使用OPEN语句打开游标,使用FETCH NEXT语句获取结果集的下一行数据,并将其存储在指定的变量中。
2. 用于分页查询:
```sql
SELECT column1, column2
FROM table1
ORDER BY column1
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;
```
这个示例中的查询使用ORDER BY子句按列column1排序结果,并使用OFFSET和FETCH NEXT子句实现分页查询。
OFFSET 10 ROWS表示要跳过前10行,FETCH NEXT 5 ROWS ONLY表示获取接下来的5行。
以上是一些常见的使用NEXT关键字的场景,具体的使用方式可以根据具体需求进行调整和扩展。
mssql 分页查询语句
mssql 分页查询语句MSSQL是一种常用的关系型数据库管理系统,支持分页查询语句。
在进行分页查询时,可以使用OFFSET FETCH或ROW_NUMBER 函数来实现。
下面列举了10个符合标题内容的MSSQL分页查询语句。
1. 使用OFFSET FETCH实现分页查询```SELECT *FROM table_nameORDER BY column_nameOFFSET (page_number - 1) * page_size ROWSFETCH NEXT page_size ROWS ONLY;```2. 使用ROW_NUMBER函数实现分页查询```SELECT *FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS row_numFROM table_name) AS subWHERE row_num BETWEEN ((page_number - 1) * page_size + 1) AND (page_number * page_size);```3. 使用CTE和ROW_NUMBER函数实现分页查询```WITH cte AS (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS row_numFROM table_name)SELECT *FROM cteWHERE row_num BETWEEN ((page_number - 1) * page_size + 1) AND (page_number * page_size);```4. 使用OFFSET FETCH和JOIN实现分页查询```SELECT t1.*FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS row_numFROM table_name) AS t1JOIN (SELECT column_nameFROM table_nameORDER BY column_nameOFFSET (page_number - 1) * page_size ROWSFETCH NEXT page_size ROWS ONLY) AS t2 ON t1.column_name = t2.column_name;```5. 使用OFFSET FETCH和子查询实现分页查询```SELECT *FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS row_numFROM table_name) AS subWHERE sub.column_name IN (SELECT column_nameFROM table_nameORDER BY column_nameOFFSET (page_number - 1) * page_size ROWSFETCH NEXT page_size ROWS ONLY);```6. 使用CTE和ROW_NUMBER函数实现分页查询(带条件)```WITH cte AS (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS row_numFROM table_nameWHERE condition)SELECT *FROM cteWHERE row_num BETWEEN ((page_number - 1) * page_size + 1) AND (page_number * page_size);```7. 使用OFFSET FETCH和子查询实现分页查询(带条件)```SELECT *FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS row_numFROM table_nameWHERE condition) AS subWHERE sub.column_name IN (SELECT column_nameFROM table_nameWHERE conditionORDER BY column_nameOFFSET (page_number - 1) * page_size ROWSFETCH NEXT page_size ROWS ONLY);```8. 使用OFFSET FETCH和JOIN实现分页查询(带条件)```SELECT t1.*FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS row_numFROM table_nameWHERE condition) AS t1JOIN (SELECT column_nameFROM table_nameWHERE conditionORDER BY column_nameOFFSET (page_number - 1) * page_size ROWSFETCH NEXT page_size ROWS ONLY) AS t2 ON t1.column_name = t2.column_name;```9. 使用OFFSET FETCH和子查询实现分页查询(带多个条件)```SELECT *FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name)AS row_numFROM table_nameWHERE condition1 AND condition2) AS subWHERE sub.column_name IN (SELECT column_nameFROM table_nameWHERE condition1 AND condition2ORDER BY column_nameOFFSET (page_number - 1) * page_size ROWSFETCH NEXT page_size ROWS ONLY);```10. 使用OFFSET FETCH和JOIN实现分页查询(带多个条件)```SELECT t1.*FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS row_numFROM table_nameWHERE condition1 AND condition2) AS t1JOIN (SELECT column_nameFROM table_nameWHERE condition1 AND condition2ORDER BY column_nameOFFSET (page_number - 1) * page_size ROWSFETCH NEXT page_size ROWS ONLY) AS t2 ON t1.column_name = t2.column_name;```以上是10个符合标题内容的MSSQL分页查询语句,可以根据具体需求选择适合的语句进行分页查询操作。
pg数据库分页查询sql语句
pg数据库分页查询sql语句一、pg数据库分页查询在进行数据库查询时,经常会遇到需要分页显示结果的情况,这时可以使用pg数据库的分页查询功能来实现。
分页查询可以有效地减少数据的传输量,提高查询效率,同时也能提升用户体验。
下面列举了十个常见的pg数据库分页查询的SQL语句。
1. 使用OFFSET和LIMIT关键字实现分页查询```sqlSELECT * FROM table_name OFFSET n LIMIT m;```其中,n表示偏移量,m表示每页显示的记录数。
2. 使用ROW_NUMBER()函数实现分页查询```sqlSELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS row_numFROM table_name) AS sub_queryWHERE row_num BETWEEN n AND m;```其中,n表示起始行号,m表示结束行号。
3. 使用FETCH和OFFSET关键字实现分页查询```sqlSELECT * FROM table_nameORDER BY column_nameOFFSET n ROWS FETCH NEXT m ROWS ONLY;```其中,n表示偏移量,m表示每页显示的记录数。
4. 使用LIMIT和OFFSET关键字实现分页查询(简化版)```sqlSELECT * FROM table_nameORDER BY column_nameLIMIT m OFFSET n;```其中,n表示偏移量,m表示每页显示的记录数。
5. 使用LIMIT关键字实现分页查询```sqlSELECT * FROM table_nameLIMIT m;```其中,m表示每页显示的记录数。
6. 使用OFFSET关键字实现分页查询```sqlSELECT * FROM table_nameOFFSET n;```其中,n表示偏移量。
sql server分区函数
sql server分区函数SQL Server分区函数是SQL Server数据库中的一种功能,用于将表或索引中的数据分别存储在不同的分区中。
通过使用分区函数,可以将数据均匀地分布在多个分区中,提高查询性能、数据加载速度以及数据维护的效率。
下面将详细介绍SQL Server分区函数的使用方法和相关注意事项。
一、什么是分区函数在SQL Server数据库中,分区函数是用于定义分区方案的一种方法。
分区方案是将表或索引按照某种规则分割成多个分区的过程。
而分区函数则是用来确定数据应该被分配到哪个分区中的规则。
二、分区函数的创建在SQL Server中,可以通过CREATE PARTITION FUNCTION语句来创建分区函数。
创建分区函数时需要指定函数的名称、参数类型和返回值类型。
例如,可以创建一个按照日期进行分区的分区函数,如下所示:CREATE PARTITION FUNCTION PartitionByDate(DATE)AS RANGE RIGHT FOR VALUES ('2019-01-01', '2020-01-01', '2021-01-01')上述语句创建了一个名为PartitionByDate的分区函数,参数类型为DATE,返回值类型为INT。
分区函数的参数类型决定了分区函数所依据的列的数据类型。
三、分区函数的使用在创建分区函数后,可以通过ALTER TABLE或CREATE INDEX语句来应用分区函数。
例如,可以将一个表按照日期进行分区,如下所示:ALTER TABLE TableNamePARTITION BY RANGE (ColumnToPartition)(PARTITION Partition1 VALUES LESS THAN (DateValue1),PARTITION Partition2 VALUES LESS THAN (DateValue2),...)上述语句将名为TableName的表按照ColumnToPartition列的值进行分区,并指定了每个分区的范围。
sqlserver创建存储过程方法
sqlserver创建存储过程方法在SQL Server中,存储过程是一种预编译的代码块,它可以接受输入参数并返回输出参数。
存储过程可以用于执行复杂的数据操作,例如数据插入、更新和删除,以及数据查询和报表生成等。
在本文中,我们将介绍如何在SQL Server中创建存储过程。
创建存储过程的步骤如下:1. 打开SQL Server Management Studio,连接到目标数据库。
2. 在“对象资源管理器”中,展开目标数据库,右键单击“存储过程”文件夹,选择“新建存储过程”。
3. 在“新建存储过程”对话框中,输入存储过程的名称和描述。
在“类型”下拉菜单中,选择“存储过程”。
4. 在“定义”窗口中,输入存储过程的代码。
存储过程的代码可以包括SQL语句、变量、控制流语句和异常处理语句等。
5. 在存储过程的代码中,可以使用输入参数和输出参数。
输入参数用于传递数据到存储过程中,输出参数用于从存储过程中返回数据。
6. 在存储过程的代码中,可以使用“EXECUTE”语句来调用其他存储过程或系统存储过程。
7. 在存储过程的代码中,可以使用“TRY…CATCH”语句来捕获异常并处理错误。
8. 在存储过程的代码中,可以使用“RETURN”语句来返回结果集或错误代码。
9. 在存储过程的代码中,可以使用“SET NOCOUNT ON”语句来禁止在执行存储过程时返回计数器信息。
10. 在存储过程的代码中,可以使用“SET ANSI_NULLS ON”和“SET QUOTED_IDENTIFIER ON”语句来设置ANSI_NULLS和QUOTED_IDENTIFIER选项。
11. 在存储过程的代码中,可以使用“GO”语句来分隔多个存储过程。
12. 在存储过程的代码中,可以使用“ALTER PROCEDURE”语句来修改存储过程的定义。
13. 在存储过程的代码中,可以使用“DROP PROCEDURE”语句来删除存储过程。
sqlserver中partition用法
sqlserver中partition用法在SQL Server中,分区(Partition)是一种将表的数据分布在多个物理位置的技术,以便更有效地管理数据和访问速度。
通过分区,可以将表拆分为较小的逻辑部分,以便更方便地执行查询和管理操作。
以下是SQL Server中分区的一些常见用法:1、创建分区表:在创建分区表时,需要定义分区的数量和每个分区包含的列。
以下是一个创建分区表的示例:sqlCREATE TABLE PartitionedTable(Column1 INT,Column2 VARCHAR(50),...)WITH (DATA_COMPRESSION = PAGE)ON PartitionScheme (PartitionColumn) =(PARTITION_Scheme1 (01, 02, 03),PARTITION_Scheme2 (04, 05, 06),...);在上面的示例中,PartitionedTable 是要创建的分区表的名称,Column1 和Column2 是表中的列。
WITH (DATA_COMPRESSION = PAGE) 指定了使用页压缩来压缩数据。
ON PartitionScheme 指定了分区方案,其中PartitionColumn 是用于分区的列,而PARTITION_Scheme1 和PARTITION_Scheme2 是定义分区的方案和范围。
2、查询分区表:查询分区表时,可以使用分区键的值来确定要查询的分区。
以下是一个查询分区表的示例:sqlSELECT *FROM PartitionedTableWHERE PartitionColumn = '01'; --根据分区键的值筛选数据在上面的示例中,PartitionedTable 是已分区的表,PartitionColumn 是用于分区的列。
通过在WHERE 子句中使用适当的分区键值,可以仅查询特定的分区。
sqlserver mod函数
sqlserver mod函数SQL Server Mod函数详解Mod函数是SQL Server中的一个数学函数,它的作用是返回两个数相除的余数。
本文将详细介绍SQL Server Mod函数的语法、使用方法以及一些实际应用场景。
语法Mod函数的语法如下:MOD(dividend, divisor)其中,dividend表示被除数,divisor表示除数。
该函数返回dividend除以divisor后的余数。
使用方法下面我们通过一个简单的例子来了解Mod函数的使用方法。
假设我们有一个表格students,其中包含了每个学生所得到的分数。
现在我们想要查询出所有分数为奇数的学生。
我们可以使用Mod函数来实现这个目标。
具体操作如下:SELECT * FROM students WHERE MOD(score, 2) = 1;上述代码中,score表示学生所得到的分数。
如果score除以2后余数为1,则说明该学生所得到的分数为奇数,因此我们可以通过这种方式查询出所有分数为奇数的学生。
实际应用场景除了上述例子中提到的查询奇偶性之外,Mod函数还有很多其他实际应用场景。
下面列举几个常见案例:1. 分组统计在某些情况下,我们需要对数据进行分组统计,并且只需要统计每组数据中某个字段值满足特定条件(例如余数为0)的记录数。
这时,Mod函数就可以派上用场。
例如,我们有一个表格orders,其中包含了每个订单的金额。
现在我们想要统计每个订单金额为100的倍数的订单数量,可以使用如下代码:SELECT COUNT(*) FROM orders WHERE MOD(amount, 100) = 0;上述代码中,amount表示订单金额。
如果amount除以100后余数为0,则说明该订单金额是100的倍数,因此我们可以通过这种方式统计出所有订单金额为100的倍数的订单数量。
2. 分页查询在进行分页查询时,我们通常需要根据某个字段进行排序,并且需要按照一定规则(例如每页显示10条记录)将数据进行分组。
