--2--
set @sql = 'SELECT  @StartID = '+@IDName+' FROM '+@TableName+' ORDER BY '+@IDName
print @sql 
sp_executesql @sql,'@StartID int out',@StartID out
select @StartID

解决方案 »

  1.   

    --2--
    set @sql = 'SELECT  @StartID = '+@IDName+' FROM '+@TableName+' ORDER BY '+@IDName
    print @sql 
    sp_executesql @sql,'@StartID int out',@StartID out
    select @StartID
      

  2.   

    DECLARE @PageLowerBound int,@StartID int,@sql varchar(225) 
    ----
    DECLARE @PageLowerBound int,@StartID int,@sql nvarchar(225) 
      

  3.   

    改好了 最后执行成功!觉得这个分页存储过程效率很高 谢谢happyflystone!
    alter PROCEDURE GetPageData
    (
    @TableName varchar(30),--表名称
    @IDName varchar(20),--表主键名称
    @PageIndex int,--当前页数 
    @PageSize  int--每页大小 
    )
    AS
    IF @PageIndex > 0
    BEGIN
    set nocount on
    DECLARE @PageLowerBound int,@StartID int,@sql nvarchar(225)
    SET @PageLowerBound = @PageSize * (@PageIndex-1)
    SET ROWCOUNT @PageLowerBound
    set @StartID =123
    SET @sql=N'SELECT  @StartID = ['+@IDName+'] FROM '+@TableName+' ORDER BY '+@IDName
        exec sp_executesql @sql,N'@StartID int output',@StartID output
    SET ROWCOUNT 0
    SET @sql='select top '+str(@PageSize) +' * from '+@TableName+' where ['+@IDName+']>'+ str(@StartID) +' ORDER BY ['+@IDName+'] '
    EXEC(@sql)
    set nocount off
    END
      

  4.   

    多谢 ! 谢谢happyflystone!
    alter PROCEDURE GetPageData
    (
    @TableName varchar(30),--表名称
    @IDName varchar(20),--表主键名称
    @PageIndex int,--当前页数 
    @PageSize  int--每页大小 
    )
    AS
    IF @PageIndex > 0
    BEGIN
    set nocount on
    DECLARE @PageLowerBound int,@StartID int,@sql nvarchar(225)
    SET @PageLowerBound = @PageSize * (@PageIndex-1)
    SET ROWCOUNT @PageLowerBound
    --set @StartID =123
    SET @sql=N'SELECT  @StartID = ['+@IDName+'] FROM '+@TableName+' ORDER BY '+@IDName
        exec sp_executesql @sql,N'@StartID int output',@StartID output
    SET ROWCOUNT 0
    SET @sql='select top '+str(@PageSize) +' * from '+@TableName+' where ['+@IDName+']>'+ str(@StartID) +' ORDER BY ['+@IDName+'] '
    EXEC(@sql)
    set nocount off
    END