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代替可行不

解决方案 »

  1.   

    --现在又3个表 A,B,C
    --表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
      

  2.   

    参考:
    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 
      

  3.   

    --现在又3个表 A,B,C
    --表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排序要放在后面
      

  4.   

    ht1258:
          你好!好像有点错误
    Msg 4145, Level 15, State 1, Line 8
    在应使用条件的上下文(在 'between1' 附近)中指定了非布尔类型的表达式。(1 row(s) affected)
      

  5.   

    在between后面加个空格WHERE Row between  '+ltrim( @startIndex ) +' and '+ltrim(@endIndex)+' '+@Orderfld