ALTER PROCEDURE [dbo].[paysliprole]
(@emp_code varchar(500),
 @name varchar(500),
 @sffp      varchar(500),
 @begin     varchar(500),
 @end       varchar(500),
 @userid    varchar(500)
)AS
BEGIN
SET IMPLICIT_TRANSACTIONS offdeclare @sql  varchar(4000),
        @where varchar(4000)
set @emp_code=case when @emp_code='' then '' else 'and emp_code like ''%'+@emp_code+'%''' end 
set @name=case when @name='' then '' else 'and (chn_name like ''%'+@name+'%'' or eng_name like ''%'+@name+'%'')' end
set @sffp=case when @sffp='false' or @sffp='' then 'and role_id='''+'no'+'''' else '' end
set @userid='and emp_id in (select emp_id from _'+@userid+')'
set @where=@emp_code+@name+@sffp+@userid
set @sql='select * from (select row_number() over(order by emp_code) rownumber,* from v_payslip_role where1=1 '''+@where+''') a where rownumber between @begin and @end)'
print @emp_code
print @name
print @sffp
print @userid
print @begin
print @end
print @where 
print @sqlexec (@sql)END
现在有三个问题,第一是@where老是拼出来会带个引号的,第二是@begin和@end的值赋不到语句中去!
第三个就是运行存储过程的时候会报错
请高手帮我看看,是哪里写的有问题。。谢谢了。。十万火急啊!!

解决方案 »

  1.   

    木有人帮忙回答下么?运行exec paysliprole '','','','1','20','admin'
    @begin和@end都可以print出来的,但就是运行出来的结果报错“必须声明标量变量@begin”求救求救
      

  2.   

     '''+@where+''' ==>  '+@where  去掉前后各两个引号between @begin and @end)' ==> between ' + @begin + ' and ' + @end + ')'
      

  3.   

    打错了。'''+@where+''' ==> '+@where +' 去掉前后各两个引号
      

  4.   

    拼接字符串很容易出错,笔记本没有环境,明天上班再瞅瞅
    1.没细看
    2.@begin和@end在你字符串里,你应该拼接
    3. 1和2的问题解决,3就OK了
      

  5.   

     between '+@begin+' and '+@end+')'
    后面那个要这么写
      

  6.   

     '''+@where+''')   这里引号太多了
     '+@where+')