消息4145 SQL Server在预期条件的上下文中指定的非布尔类型的表达式,在'END'附近

时间:2013-11-30 20:23:37

标签: sql sql-server

我不知道为什么它给了我这个错误,找不到任何东西

这是我的代码

@cid int,
@sid char(9)
AS

BEGIN

update StudentCourses
SET mode=0
where(select CourseId,StudentId from StudentCourses where CourseId=@cid 
and StudentId=(Select PkId from Students where ID=@sid))

END
GO

2 个答案:

答案 0 :(得分:0)

你的where语句没有比较所以它无效 - 它不能是真或假

答案 1 :(得分:0)

不确定你的桌面结构究竟是什么样的,这是猜测,但我认为你需要做这样的事情...

@cid int,
@sid char(9)
AS

BEGIN

update StudentCourses
SET mode=0
where CourseId=@cid 
and StudentId IN (Select PkId 
                  from Students 
                  where ID=@sid)

END
GO

查询问题

  

1- WHERE子句其中(选择CourseId,来自Stude的StudentId ....您的子查询只是检索数据,它没有为您的主查询提供条件来过滤它刚刚返回的行数据这是导致query.br/>

错误的一个问题      

2 - 具有可能的多个值的子查询和StudentId =(从ID = @sid的学生中选择PkId)此子查询可以返回多个值。在这种情况下,您不能使用'='等于运算符,您需要使用'IN'运算符,就像我在答案中提到的那样。