ALTER PROCEDURE [dbo].[P_GetOverBatch]
(
@startIndex INT =1,
@endindex INT = 15,
@Where nvarchar(2000) = '', -- 查询条件
@Orderfld nvarchar(50) = '' -- 排序字段
)
AS
begin
WITH batchList AS (
SELECT ROW_NUMBER() OVER (ORDER BY O.BatchTicket_ID DESC)AS Row, *
from p_BatchTicket O
--如下连接有误,怎么连接
@Where + '' + @Orderfld
)SELECT BatchTicket_ID,BatchTicket_No,BatchTicket_Date,BatchTicket_ToOrderID,BatchTicket_MaterialID
FROM batchlist
WHERE Row between @startIndex and @endIndexend以上连接错误 该如何处理?ORDER BY O.BatchTicket_ID DESC 这个如果用
@Orderfld代替可行不
(
@startIndex INT =1,
@endindex INT = 15,
@Where nvarchar(2000) = '', -- 查询条件
@Orderfld nvarchar(50) = '' -- 排序字段
)
AS
begin
WITH batchList AS (
SELECT ROW_NUMBER() OVER (ORDER BY O.BatchTicket_ID DESC)AS Row, *
from p_BatchTicket O
--如下连接有误,怎么连接
@Where + '' + @Orderfld
)SELECT BatchTicket_ID,BatchTicket_No,BatchTicket_Date,BatchTicket_ToOrderID,BatchTicket_MaterialID
FROM batchlist
WHERE Row between @startIndex and @endIndexend以上连接错误 该如何处理?ORDER BY O.BatchTicket_ID DESC 这个如果用
@Orderfld代替可行不
--表A一个字段a是主键 表B有1个字段b是主键表C有3个字段 c1主键,c2,c3
--我想的过程是这样的
--update A
--if @@error <> 0
--如果有错误就直接去insert--update B
--if @@error <> ''--insert into C --如果update A的时候 出现错误 就不执行update B 直接去insert C 然后退出过程ALTER PROCEDURE [dbo].[P_GetOverBatch]
(
@startIndex INT =1,
@endindex INT = 15,
@Where nvarchar(2000) = '', -- 查询条件
@Orderfld nvarchar(50) = '' -- 排序字段
)
AS
begin
declare @s varchar(max)
set @s='
WITH batchList AS (
SELECT ROW_NUMBER() OVER (ORDER BY O.BatchTicket_ID DESC)AS Row, *
from p_BatchTicket O '+
--如下连接有误,怎么连接
@Where + ' ' + @Orderfld+'
)SELECT BatchTicket_ID,BatchTicket_No,BatchTicket_Date,BatchTicket_ToOrderID,BatchTicket_MaterialID
FROM batchlist
WHERE Row between'+ltrim( @startIndex ) +' and '+ltrim(@endIndex)
exec(@s)end
SQL 2005的ROW_NUMBER()实现分页功能DECLARE @pagenum AS INT, @pagesize AS INT
SET @pagenum = 2
SET @pagesize = 3
SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY newsid DESC) AS rownum,
newsid, topic, ntime, hits
FROM news) AS D
WHERE rownum BETWEEN (@pagenum-1)*@pagesize+1 AND @pagenum*@pagesize
ORDER BY newsid DESC aspx里面只需给SQL传入pageid和条数即可。 CSDN上还有个存储过程实现分页的代码:
ALTER PROCEDURE news_Showlist
(
@tblName varchar(255), -- 表名
@strGetFields varchar(1000), -- 需要返回的列
@fldName varchar(255), -- 排序的字段名
@PageSize int , -- 页尺寸
@PageIndex int , -- 页码
@strWhere varchar(1500), -- 查询条件(注意: 不要加where)
@Sort varchar(255) --排序的方法)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型if @Sort = 'desc'
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName +' desc'
--如果@OrderType不是,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
begin
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName
+ ' where ' + @strWhere + ' ' + @strOrder
end
else
begin
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName
+ ' '+ @strOrder
end
--如果是第一页就执行以上代码,这样会加快执行速度
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
exec (@strSQL)
RETURN
--表A一个字段a是主键 表B有1个字段b是主键表C有3个字段 c1主键,c2,c3
--我想的过程是这样的
--update A
--if @@error <> 0
--如果有错误就直接去insert--update B
--if @@error <> ''--insert into C --如果update A的时候 出现错误 就不执行update B 直接去insert C 然后退出过程ALTER PROCEDURE [dbo].[P_GetOverBatch]
(
@startIndex INT =1,
@endindex INT = 15,
@Where nvarchar(2000) = '', -- 查询条件
@Orderfld nvarchar(50) = '' -- 排序字段
)
AS
begin
declare @s varchar(max)
set @s='
WITH batchList AS (
SELECT ROW_NUMBER() OVER (ORDER BY O.BatchTicket_ID DESC)AS Row, *
from p_BatchTicket O '+
--如下连接有误,怎么连接
@Where +'
)SELECT BatchTicket_ID,BatchTicket_No,BatchTicket_Date,BatchTicket_ToOrderID,BatchTicket_MaterialID
FROM batchlist
WHERE Row between'+ltrim( @startIndex ) +' and '+ltrim(@endIndex)+' '+@Orderfld
exec(@s)end排序要放在后面
你好!好像有点错误
Msg 4145, Level 15, State 1, Line 8
在应使用条件的上下文(在 'between1' 附近)中指定了非布尔类型的表达式。(1 row(s) affected)