您的位置:首页 > 其它

一个存储过程中的小问题

2013-03-18 16:48 316 查看
今天一下午我就用来写这个存储过程了。遇到了好几个问题,现在解决了,就晒一晒,看看各位大牛有没有啥更好的办法,算是抛砖引玉吧。。。

这个存储过程是我用来搜索拥有某种技能的用户的

最后的代码,终于不出错了。。

alter PROCEDURE [dbo].[selectuserbypageandsearch]
@categoryid int,
@sex int,
@skillid int,
@ishaved int,

@pageindex int,
@pagesize int

AS
DECLARE @strSQL varchar(5000)
declare @whereSQL varchar(1000)
set @whereSQL='where dbo.Users.isskillopened =1'
if @ishaved>0
set @whereSQL=@whereSQL+'and dbo.Myskills.ishaved='+ltrim(STR(@ishaved))+''
if @sex>=0
set @whereSQL =@whereSQL +' and dbo.Users.sex='+STR(@sex)+''
if @skillid>0
set @whereSQL =@whereSQL +' and dbo.Myskills.sid='+STR(@skillid)+''
if @skillid<=0 and @categoryid>=0
set @whereSQL =@whereSQL +' and dbo.Skills.categoryid='+STR(@categoryid)+''

IF @pageindex = 1
BEGIN

SET @strSQL ='SELECT DISTINCT TOP '+ STR(@pagesize) + '  dbo.Users.id, dbo.Users.name, dbo.Users.nickname,dbo.Users.xuehao
FROM    dbo.Myskills INNER JOIN
dbo.Skills ON dbo.Myskills.sid = dbo.Skills.id INNER JOIN
dbo.Users ON dbo.Myskills.uid = dbo.Users.id
'+ Convert(varchar(1000),@whereSQL) + ''--这里修改一下

end
ELSE
BEGIN
SET @strSQL ='SELECT DISTINCT TOP '+ STR(@pagesize) + '  dbo.Users.id, dbo.Users.name, dbo.Users.nickname,dbo.Users.xuehao
FROM    dbo.Myskills INNER JOIN
dbo.Skills ON dbo.Myskills.sid = dbo.Skills.id INNER JOIN
dbo.Users ON dbo.Myskills.uid = dbo.Users.id
'+ Convert(varchar(1000),@whereSQL) + ' and dbo.Users.id >(SELECT ISNULL(MAX([id]),0) FROM (SELECT TOP '+STR((@pageindex-1)*@pagesize)+' id FROM [User] '+ Convert(varchar(1000),@whereSQL) + ' ORDER BY id) as A) ORDER by dbo.Users.id desc '
end
select @strSQL
EXEC(@strSQL)
GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: