SQLServer通用分页存储过程,字符分隔函数
分页存储过程
sp_QueryPaging
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author:
-- Create date:
-- Description: 分页查询
-- 返回的数据中总是在每条记录前加上行号RowNumber列。
-- 如果未指定@StrSelect参数,相当于设置它为'*'
-- 如果未指定@Strfrom参数,不做查询,返回-1
-- 如果未指定@StrWhere参数,则忽略Where条件
-- 如果未指定@StrOrder参数,试着自动获得标识列作为@StrOrder,失败则不做查询,返回-1
-- 如果未指定@PageSize参数,或者它<=0,则返回全部记录
-- 如果未指定@PageIndex参数,会设置它为1,显示第一页数据
-- 参考:shiwenbin http://www.cnblogs.com/virusswb/archive/2009/10/20/1587179.html
-- =============================================
ALTER PROCEDURE [dbo].[sp_QueryPaging]
@StrSelect NVARCHAR(4000) = '*' , --欲显示的列(多列用逗号分开),例如:id,name
@Strfrom NVARCHAR(4000) , --表名称,或者是表连接字符串,多表连接例如:student as s inner join dwinfo as dw on s.dwbh=dw.bh
@StrWhere NVARCHAR(4000) = '' , --查询条件,''代表没有条件,单条件或者多条件,多条件例如:name='啊' and id=10
@StrOrder NVARCHAR(4000) , --排序列(多个排序列用逗号分开),例如:id desc,name as
@PageSize INT = 0 , --每页显示条数
@PageIndex INT = 1 , --当前页
@RecordCount BIGINT = -1 OUTPUT --返回当前页记录数
AS
BEGIN
SET NOCOUNT ON ;
IF @Strfrom IS NULL
BEGIN
RETURN -1
END
--若没有指定@StrOrder,试着获取标识列
IF @StrOrder IS NULL
BEGIN
DECLARE @identitycol NVARCHAR(50)
SET @identitycol = ( SELECT TOP ( 1 )
COLUMN_NAME
from INFORMATION_SCHEMA.columns
WHERE TABLE_NAME = @Strfrom
AND COLUMNPROPERTY(OBJECT_ID(@Strfrom),
COLUMN_N
相关文档:
*** author:Susan
*** date:2005/08/05
*** expliation:如何寫存儲過程的格式及例子,有游標的用法!
*** 本版:SQL SERVER 版!
******************************************************/
在存儲過程中的格式規格:
CREATE PROCEDURE XXX
/*
列舉傳入 ......
1
.绝对值
S:
select
abs
(
-
1
) value
O:
select
abs
(
-
1
) value
from
dual
2
.取整(大)
S:
select
ceiling
(
-
1.001
) value
O:
select
ceil(
-
1.001
) value
from
d ......
本来我是不赞成使用通用存储过程的,主要是因为根据表结构来定制分页查询不用动态的拼SQL,这样才是真正的高效,而且只要写过一个,那么再有新需求的时候,小范围改动几处就ok了。
但总是有人向我讨要或者讨论通用存储过程,没办法,被逼无奈,良心丧与困境。
木有找到T-SQL代码编辑器
-- ============================= ......
1.建表(Create table)时使用 IDENTITY (SEED,INCREMENT)
其中SEED是起始值,INCREMENT是增量。
例:
CREATE TABLE mytable1
(
[user_id] BIGINT NOT NULL
IDENTITY(1, 1) ,
......