关于存储进程的一个小题目
发布时间:2016-10-27 14:27:28 所属栏目:MsSql教程 来源:站长网
导读:副标题#e# 今天一下午我就用来写这个存储过程了。遇到了好几个问题,现在解决了,就晒一晒,看看各位大牛有没有啥更好的办法,算是抛砖引玉吧。。。 这个存储过程是我用来搜索拥有某种技能的用户的 存储过程 create PROCEDURE [dbo].[selectuserbypageandse
后面的几个字母为啥不出现了。。。这时候我突然想到了有关T-SQL的10个好习惯(http://kb.cnblogs.com/page/160066/)里的第二条。。varchar要声明长度,果然,在@wheresql变量变换的时候没有加上varchar的长度,默认的长度为一,造成的结果。 最后的代码,终于不出错了。。 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 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- VIEWGOOD(远古)全程直播“江苏省经济论坛”
- sql-server – 在运行性能比较之前清除缓存的SQL Server命令
- 使用事务日志解决SQL Server的4个常见故障
- sql server 2012 FileTable有什么些功能?
- 承启AA5700U:全力放纵GeForce FX 5700 Ultra
- 利用ASP.NET MVC和Bootstrap快速搭建个人博客之后台dataTab
- 盈通R9200se“399”还送奇迹开户卡!
- 20分钟复制盗版DVD 美国一公司遭版权棒打
- sql-server – 为什么这些字符在SQL Server中都是相同的?
- 在SQL Server 2005中实现表的行列转换