请高手帮忙看看这个存储过程的问题!!十万火急!!谢谢!!

jimmykelvin 2012-06-28 09:39:28
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 off

declare @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 @sql

exec (@sql)

END


现在有三个问题,第一是@where老是拼出来会带个引号的,第二是@begin和@end的值赋不到语句中去!
第三个就是运行存储过程的时候会报错
请高手帮我看看,是哪里写的有问题。。谢谢了。。十万火急啊!!
...全文
49 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jimmykelvin 2012-06-28
谢谢各位了。。问题已经解决。。。
回复
筱筱澄 2012-06-28
'''+@where+''') 这里引号太多了


'+@where+')
回复
筱筱澄 2012-06-28
between '+@begin+' and '+@end+')'


后面那个要这么写
回复
wangxianshou 2012-06-28
拼接字符串很容易出错,笔记本没有环境,明天上班再瞅瞅
1.没细看
2.@begin和@end在你字符串里,你应该拼接
3. 1和2的问题解决,3就OK了
回复
shoppo0505 2012-06-28
[Quote=引用 2 楼 的回复:]
'''+@where+''' ==> '+@where 去掉前后各两个引号
[/Quote]
打错了。

'''+@where+''' ==> '+@where +' 去掉前后各两个引号
回复
shoppo0505 2012-06-28
'''+@where+''' ==> '+@where 去掉前后各两个引号

between @begin and @end)' ==> between ' + @begin + ' and ' + @end + ')'
回复
jimmykelvin 2012-06-28
木有人帮忙回答下么?

运行exec paysliprole '','','','1','20','admin'
@begin和@end都可以print出来的,但就是运行出来的结果报错“必须声明标量变量@begin”

求救求救。。。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2012-06-28 09:39
社区公告
暂无公告