--分页查询的入库明细存储过程 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 判断没有执行? 在线求解
------解决方案--------------------------------------------------------
说明你传进来的值不是null么
------解决方案--------------------------------------------------------
你外边传进来的是"" 而不是null 所以你要
if @bianma <>''
------解决方案--------------------------------------------------------
SQLServer 用 3# 方法
------解决方案--------------------------------------------------------
Execute @sq_sql前加一句print(@sq_sql)
然后你先改用文本方式执行显示。
看到结果后,相信你自己能够解决了。
PS:@cpXH如果传入的空字符串的话,你的那个条件不成立。这种问题仔细点然后自己严谨的排查一下应该是自己解决的。
------解决方案--------------------------------------------------------
真
真服了你了
set @sq_sql = N'select top '+@pageSize'+ * from tb_rkdetails where k_id not in(select top '+@pageSize*(@pageIndex-1)+' from tb_rkdetails)'