CREATE PROCEDURE dbo.Ge
@tblName   varchar(255)='product',       -- 表名
 @PageSize   int = 20,          -- 页尺寸 
  @PageIndex  int = 2 ,     -- 页码@strWhere  varchar(8000) = 'TradeClass=05'     -- 查询条件 (注意: 不要加 where)    ASdeclare @strSQL   varchar(8000)       -- 主语句
declare @strTmp   varchar(8000)        -- 临时变量
set @strSQL="select top "+ str(@PageSize) +" *
from  (
  select top "+str(@PageSize* @PageIndex  )+"  *  from  "+ @tblName  +"
  where "+@strWhere+" order by id asc
) a
order by id desc"
SET @strSQL="select count(*)  from product where TradeClass=05"
exec (@strSQL)
GO在查询分析器里用exec Ge运行时出现错误 服务器: 消息 245,级别 16,状态 1,行 1将 varchar 值 '41----' 转换为数据类型为 int 的列时发生语法错误。

解决方案 »

  1.   

    错误已经很明显了,你需要转换的数据,不是int类型,所以无法转换
    从你的错误来看,你这个无效的数据是“41----”,至于这个数据怎么来的
    得你自己检查。
      

  2.   

    SET @strSQL="select count(*)  from product where TradeClass=05" 
    只要加上这一句就出现这个错误,不知道为什么,我这是在运行一个分页存储过程
      

  3.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetRecordByPage]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[GetRecordByPage]
    GOCREATE PROCEDURE GetRecordByPage
        @tblName      varchar(255),       -- 表名
        @fldName      varchar(255),       -- 主键字段名
        @PageSize     int = 10,           -- 页尺寸
        @PageIndex    int = 1,            -- 页码
        @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
        @strWhere     varchar(1000) = '', -- 查询条件 (注意: 不要加 where)
        @IsReCount    bit = 0,            -- 返回记录总数, 非 0 值则返回
        @FieldList    varchar(200)        -- 返回的字段
    ASdeclare @strSQL   varchar(6000)       -- 主语句
    declare @strTmp   varchar(100)        -- 临时变量
    declare @strOrder varchar(400)        -- 排序类型
    if @PageIndex = 0
     begin
      set @PageIndex = 1
     end
    if @OrderType != 0
    begin
        set @strTmp = '<(select min'
        set @strOrder = ' order by [' + @fldName +'] desc'
    end
    else
    begin
        set @strTmp = '>(select max'
        set @strOrder = ' order by [' + @fldName +'] asc'
    endif @strWhere != ''---条件不为空
        set @strSQL = 'select top ' + str(@PageSize) + ' ' + @FieldList + ' from ['
            + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
            + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
            + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
            + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
    else---条件为空
    set @strSQL = 'select top ' + str(@PageSize) + ' ' + @FieldList + ' from ['
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
        + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
        + @strOrder    set @strTmp =''
        if @strWhere != ''
            set @strTmp = ' where ' + @strWhereif @PageIndex = 1
    begin
        set @strSQL = 'select top ' + str(@PageSize) + ' ' + @FieldList + ' from ['
            + @tblName + ']' + @strTmp + ' ' + @strOrder
    endif @IsReCount != 0
        set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+ @strTmpexec (@strSQL)
    GO