对Select语句结果

时间:2015-10-24 09:13:53

标签: sql sql-server select

我正在创建一个存储过程,它接受以下参数:

 @LessonId char(15), @TeacherName char(25), @TeacherSessionId char(10),
 @CurrentTeacher char(25) OUTPUT

这就是我想要做的事情:

  1. 如果表格中不存在LessonId,则插入新行
  2. 如果已经存在,则需要执行以下操作:
    a)检查TeacherName& TeacherSessionId与我的相同(输入参数),如果是,则只更新LoginTime
    b)如果数据库中的TeacherName OR TeacherSessionId与我的不同,则本课程属于其他人,因此请返回教师姓名
  3. 避免在表上运行过多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步但我不确定如何。

1 个答案:

答案 0 :(得分:0)

潜在问题。您似乎使用LessionID作为键列。但是稍后在代码中,您忽略了键列。

潜在的解决方案:选择一个并将它们加载到变量中,同时也将聚簇键列保存到变量中。计算出你的逻辑,然后发布一个更新。如果使用群集密钥进行更新,则开销会非常小。

纳兹