--分页查询的入库明细存储过程 sp_select_rkdetails
if exists(select * from sysobjects where name='sp_select_rkdetails')
  drop proc sp_select_rkdetails
go
create proc sp_select_rkdetails
(
   @pageIndex int,   --当前页码
   @pageSize int,    --每页显示的数目
   @orderId varchar(50)=null, --入库单ID
   @bianma varchar(50)=null, --产品编码
   @cpXH varchar(50)=null    --产品型号
)
as 
   DECLARE @sq_sql varchar(1000)
   set @sq_sql = N'select top @pageSize * from tb_rkdetails where k_id not in(select top @pageSize*(@pageIndex-1) from tb_rkdetails)'
   if @orderId is not null
     begin
       set @sq_sql = @sq_sql+ N' and k_by1 like N''%'+@orderId+'%'''
     end
   if @bianma is not null
     begin
       set @sq_sql = @sq_sql+ N' and k_cpBianma like N''%'+@bianma+'%'''
     end
   if @cpXH is not null
     begin
       set @sq_sql = @sq_sql+ N' and k_cpXHnumber like N''%'+@cpXH+'%'''
     end
   Execute @sq_sql
go
//调用存储过程
Exec sp_select_rkdetails '2','15','','',''但是报错了
消息 203,级别 16,状态 2,过程 sp_select_rkdetails,第 24 行
名称 'select top @pageSize * from tb_rkdetails where k_id not in(select top @pageSize*(@pageIndex-1) from tb_rkdetails) and k_by1 like N'%%' and k_cpBianma like N'%%' and k_cpXHnumber like N'%%'' 不是有效的标识符。为什么 我的 is not null 判断没有执行? 在线求解

解决方案 »

  1.   

    你外边传进来的是"" 而不是null 所以你要 if @bianma <>''
      

  2.   

    SQLServer 用 3# 方法
      

  3.   

    Execute @sq_sql前加一句print(@sq_sql)
    然后你先改用文本方式执行显示。
    看到结果后,相信你自己能够解决了。
    PS:@cpXH如果传入的空字符串的话,你的那个条件不成立。这种问题仔细点然后自己严谨的排查一下应该是自己解决的。
      

  4.   

    我改了你的方法 
    但是怎么说我的存储过程不存在?消息 2812,级别 16,状态 62,过程 sp_select_rkdetails,第 24 行
    找不到存储过程 'select top @pageSize * from tb_rkdetails where k_id not in(select top @pageSize*(@pageIndex-1) from tb_rkdetails)'。
      

  5.   


    真服了你了
    set @sq_sql = N'select top '+@pageSize'+ * from tb_rkdetails where k_id not in(select top '+@pageSize*(@pageIndex-1)+' from tb_rkdetails)'
      

  6.   


    select top 15 * from tb_rkdetails where k_id not in(select  top 0 k_id from tb_rkdetails)
    15
    消息 8114,级别 16,状态 1,过程 sp_select_rkdetails,第 0 行
    从数据类型 varchar 转换为 int 时出错。
      

  7.   

    我以前写的都是好简单的SQL存储过程