关于存储过程中的查询
Regarding query in stored procedure
我必须创建一个存储过程,存储过程的输入将是课程 ID 和学生 ID。
存储过程将检查学生是否已注册 class。
如果该学生已经注册,则显示一条消息“该学生已注册”。
下面是我试过的。没有得到预期的结果。
我拥有的表格:
这是我试过的
CREATE PROCEDURE Clk (@CourseId AS INTEGER, @StudentId AS VARCHAR) AS
DECLARE @stud INTEGER
SELECT @stud = (select Count(enrollmentId) from CourseEnrollment
where StudentId = @StudentId and CourseId = @CourseId )
if @stud > 0
BEGIN
print 'The student is already enrolled'
END
else
BEGIN
print 'nope'
END
已编辑:
我现在开始工作了。我在创建存储过程时给了错误的数据类型。
您在过滤记录时没有考虑 CourseId。您的查询:
SELECT @stud = (select Count(enrollmentId)
from CourseEnrollment
where StudentId = @StudentId )
如果你已经通过了学生 xyz 的课程 1,并且如果 xyz 已经注册了课程 2,那么你查询的结果将是 1,即使他没有注册课程 1,你也会说他有已注册。
试试这样的东西:
IF EXISTS (SELECT CourseId
FROM courseEnrollment
WHERE StudentId = @StudentId
AND CourseId = @CourseId) THEN
print 'The student is already enrolled'
ELSE
print 'The student has not enrolled'
END IF;
我必须创建一个存储过程,存储过程的输入将是课程 ID 和学生 ID。 存储过程将检查学生是否已注册 class。 如果该学生已经注册,则显示一条消息“该学生已注册”。
下面是我试过的。没有得到预期的结果。 我拥有的表格:
这是我试过的
CREATE PROCEDURE Clk (@CourseId AS INTEGER, @StudentId AS VARCHAR) AS
DECLARE @stud INTEGER
SELECT @stud = (select Count(enrollmentId) from CourseEnrollment
where StudentId = @StudentId and CourseId = @CourseId )
if @stud > 0
BEGIN
print 'The student is already enrolled'
END
else
BEGIN
print 'nope'
END
已编辑:
我现在开始工作了。我在创建存储过程时给了错误的数据类型。
您在过滤记录时没有考虑 CourseId。您的查询:
SELECT @stud = (select Count(enrollmentId)
from CourseEnrollment
where StudentId = @StudentId )
如果你已经通过了学生 xyz 的课程 1,并且如果 xyz 已经注册了课程 2,那么你查询的结果将是 1,即使他没有注册课程 1,你也会说他有已注册。
试试这样的东西:
IF EXISTS (SELECT CourseId
FROM courseEnrollment
WHERE StudentId = @StudentId
AND CourseId = @CourseId) THEN
print 'The student is already enrolled'
ELSE
print 'The student has not enrolled'
END IF;