关于存储过程的一个小问题
发布时间:2016-05-18 13:24:45 所属栏目:MsSql教程 来源:站长网
导读:今天一下午我就用来写这个存储过程了。遇到了好几个问题,现在解决了,就晒一晒,看看各位大牛有没有啥更好的办法,算是抛砖引玉吧。。。 这个存储过程是我用来
|
今天一下午我就用来写这个存储过程了。遇到了好几个问题,现在解决了,就晒一晒,看看各位大牛有没有啥更好的办法,算是抛砖引玉吧。。。
这个存储过程是我用来搜索拥有某种技能的用户的
存储过程
create 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 1=1 and 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
'+ STR(@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
'+ STR(@whereSQL) + ' and dbo.Users.id >(SELECT ISNULL(MAX([id]),0) FROM (SELECT TOP '+STR((@pageindex-1)*@pagesize)+' id FROM [User] '+ STR(@whereSQL) + ' ORDER BY id) as A) ORDER by dbo.Users.id desc '
end
select @strSQL
EXEC(@strSQL)
GO
写好之后,把它执行一下。。。。 我使用的是下面的代码 exec selectuserbypageandsearch 1,-1,0,0,1,10 果然有问题。。。。水平太菜。。。没办法。。错误显示的是 消息 8114,级别 16,状态 5,过程 selectuserbypageandsearch,第 27 行 从数据类型 varchar 转换为 float 时出错。 好吧,我见过这个错误,那就修改它。。。(虽然我不知道为什么要这么改。。。) 把
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,@whereSQL) + ''--有@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,@whereSQL) + ' and dbo.Users.id >(SELECT ISNULL(MAX([id]),0) FROM (SELECT TOP '+STR((@pageindex-1)*@pagesize)+' id FROM [User] '+ Convert(varchar,@whereSQL) + ' ORDER BY id) as A) ORDER by dbo.Users.id desc '
end
select @strSQL
EXEC(@strSQL)
GO (编辑:开发网_郴州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – 使用主键更改列数据类型
- sql-server – 使用SQL登录登录时出现SQL Server错误
- 如何检查表是否存在以及它是否不存在在sql server 2008中创
- 在ASP.NET 2.0中操作数据之六十五:在TableAdapters中创建新
- ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统之前端
- ASP.NET在线文本编辑控件的使用(第6节)
- 追查使用者网上活动 免费P2P软件内藏“间谍
- sql-server – SQL Server表达的数据库数量
- sql-server – 在SSMS 2012中格式化T-SQL
- sqlserver 临时表 Vs 表变量 详细说明

浙公网安备 33038102330466号