我正在创建一个存储过程,它接受以下参数:
@LessonId char(15), @TeacherName char(25), @TeacherSessionId char(10),
@CurrentTeacher char(25) OUTPUT
这就是我想要做的事情:
避免在表上运行过多SELECT操作的最佳方法是什么。 我知道我可以这样做:
IF NOT EXISTS (SELECT * FROM Lessontb WHERE LessonId = @LessonId )
BEGIN
INSERT...
END
ELSE
BEGIN
IF EXISTS (SELECT TeacherName FROM Lessontb
WHERE TeacherName <> @TeacherName
OR TeacherSessionId <> @TeacherSessionId )
BEGIN
SET @CurrentTeacher = TeacherName
END
IF EXISTS (SELECT TeacherName FROM Lessontb
WHERE TeacherName = @TeacherName
AND TeacherSessionId = @TeacherSessionId )
BEGIN
UPDATE ... LoginTime
END
END
我很确定必须有一个更干净的方法来执行此操作,例如在第一个SELECT的结果集上运行第2步和第3步但我不确定如何。
答案 0 :(得分:0)
潜在问题。您似乎使用LessionID作为键列。但是稍后在代码中,您忽略了键列。
潜在的解决方案:选择一个并将它们加载到变量中,同时也将聚簇键列保存到变量中。计算出你的逻辑,然后发布一个更新。如果使用群集密钥进行更新,则开销会非常小。
纳兹