set @TBName ='aa'
set @KeyField='id'
set @SQL = ''
set @SQL = @SQL + 'declare @sLastValue nvarchar(100)' + char(13)
set @SQL = @SQL + 'SELECT Top 30 '
+ ' @sLastValue=' + @KeyField
+ ' FROM ' + @TBName + ' '
+ ' order by desc '+ char(13)set @SQL = @SQL + 'SELECT Top 10 '
+ '* '
+ ' FROM ' + @TBName
+ ' where ' + @KeyField+ '<'+ '@sLastValue '
+ ' order by desc '上面这段代码有两处看不懂:
1. 为什么要用 char(13) ,有什么作用;
2. @sLastValue 是什么东东,在这里有什么作用(我的理解:是自定义关键字,存放30条记录的id字段)。
set @KeyField='id'
set @SQL = ''
set @SQL = @SQL + 'declare @sLastValue nvarchar(100)' + char(13)
set @SQL = @SQL + 'SELECT Top 30 '
+ ' @sLastValue=' + @KeyField
+ ' FROM ' + @TBName + ' '
+ ' order by desc '+ char(13)set @SQL = @SQL + 'SELECT Top 10 '
+ '* '
+ ' FROM ' + @TBName
+ ' where ' + @KeyField+ '<'+ '@sLastValue '
+ ' order by desc '上面这段代码有两处看不懂:
1. 为什么要用 char(13) ,有什么作用;
2. @sLastValue 是什么东东,在这里有什么作用(我的理解:是自定义关键字,存放30条记录的id字段)。
set @SQL = @SQL + 'declare @sLastValue nvarchar(100)'
set @SQL = @SQL + ' SELECT Top 30 ' @sLastValue是动态语句里的一个变量,在下面的调用sp_executesql存储过程有说明,你没有贴全你的代码
2 char(13)意为回车
--定义参数
@TBName varchar(100), --表名
@PageSize int=10, --每页的记录数
@CurPage int=1, --当前要显示的页
@KeyField nvarchar(100)='ID', --关键字 ID
@KeyAscDesc nvarchar(4)='ASC', -- 比较苻号:DESC为" <" 或 ASC 为" >"
@Fields nvarchar(500)='*', --查询字段
@Condition varchar(2500)='', --where条件
@Order nvarchar(200)='', --排序
@doCount int=0 --最取1个参数。 传递过来可能为1
) as --指明存储过程要执行的动作declare @SQL nvarchar(2000)
if @doCount != 0 --统计记录数
begin
if @Condition !=''
set @SQL = 'select count(*) as Total from ' + @TBName + ' where '+@Condition
else
set @SQL = 'select count(*) as Total from ' + @TBName
end
else begin
if @TBName = ''
begin
--11:用户定义的与消息关联的严重级别。用户可以使用从 0 到 18 之间的严重级别
--1: 表示有关错误调用状态的信息从 1 到 127 的任意整数。state 的负值默认为 1
raiserror('请指定表名!',11,1)
return
end
if @PageSize <=0 or @CurPage <0
begin
raiserror('当前页数和每页的记录数都必须大于零!',11,1)
return
end
if @KeyAscDesc = 'DESC'
set @KeyAscDesc = '<'
else
set @KeyAscDesc = '>'
if @Condition <> ''
set @Condition = ' where ' + @Condition
set @SQL = ''
if @CurPage = 1 --当前页是第1页时
set @SQL = @SQL + 'SELECT Top '
+ cast(@PageSize as nvarchar(20)) + ' '
+ @Fields + ' FROM ' + @TBName + @Condition + ' ' + @Order
else begin --当 当前页不是第1页时
declare @iTopNum int --此当前页的起始记录数
set @iTopNum = @PageSize * (@CurPage - 1)
--在字符串中用 CHAR(13) 和 CHAR(10) 产生一个回车并生成一个新行
--我的理解: 定义一个变量@sLastValue
set @SQL = @SQL + 'declare @sLastValue nvarchar(100)' + char(13)
set @SQL = @SQL + 'SELECT Top '
+ cast(@iTopNum as nvarchar(20))
+ ' @sLastValue=' + @KeyField
+ ' FROM ' + @TBName + @Condition + ' '
+ @Order + char(13)
declare @Condition2 nvarchar(200)
if @Condition = '' -- @Condition 是where条件 一般为空
set @Condition2 = ' where ' + @KeyField + @KeyAscDesc + '@sLastValue '
else
set @Condition2 = ' and ' + @KeyField + @KeyAscDesc + '@sLastValue '
set @SQL = @SQL + 'SELECT Top '
+ cast(@PageSize as nvarchar(20)) + ' ' + @Fields
+ ' FROM ' + @TBName + @Condition + @Condition2 + @Order
end
end EXECUTE sp_executesql @SQL
GO
Windows系统Enter键=char(13)+char(10)
UNIX系统Enter键=char(10)老式打字机回车(char(13))=回到行首,加换行(char(10))才会跳到下一空行。