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的值赋不到语句中去!
第三个就是运行存储过程的时候会报错
请高手帮我看看,是哪里写的有问题。。谢谢了。。十万火急啊!!
(@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的值赋不到语句中去!
第三个就是运行存储过程的时候会报错
请高手帮我看看,是哪里写的有问题。。谢谢了。。十万火急啊!!
@begin和@end都可以print出来的,但就是运行出来的结果报错“必须声明标量变量@begin”求救求救
1.没细看
2.@begin和@end在你字符串里,你应该拼接
3. 1和2的问题解决,3就OK了
后面那个要这么写
'+@where+')