加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

关于存储进程的一个小题目

发布时间:2016-10-30 15:38:57 所属栏目:MsSql教程 来源:站长网
导读:副标题#e# 今天一下午我就用来写这个存储过程了。遇到了好几个问题,现在解决了,就晒一晒,看看各位大牛有没有啥更好的办法,算是抛砖引玉吧。。。 这个存储过程是我用来搜索拥有某种技能的用户的 存储过程 create PROCEDURE [dbo].[selectuserbypageandse

这次消息界面显示的错误是

(1 行受影响)

消息 102,级别 15,状态 1,第 5 行

'=' 附近有语法错误。

这是咋回事??我一看select出来的语句。。。

SELECT DISTINCT TOP         10  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              where dbo.Users.isskillopened=

一到“=”这就断了。。。我以为是因为1的问题。。。

更多精彩内容:http://www.bianceng.cn/database/SQLServer/

于是我就加上了Convert函数,准备把它变成varchar类型的。但是不行,报同样的错误。

这是咋回事。。。。我就纠结开了,我在等号前又加了个空格。。。

这次报的是另外的错误

消息 4145,级别 15,状态 1,第 5 行

在应使用条件的上下文(在 'isskillopened' 附近)中指定了非布尔类型的表达式。

这是什么错误。。以前没见过。。。百度了一些,没有和我的情况类似的。。。

我又在where后面加了个1=1.。。。

这时候,我的存储过程变成了。。

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 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
            '+ Convert(varchar,@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

现在的错误变成了

消息 4145,级别 15,状态 1,第 5 行

在应使用条件的上下文(在 'isskil' 附近)中指定了非布尔类型的表达式。

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读