将多行与 SQL Server 2008 中的一行进行比较

本文关键字:比较 一行 SQL Server 2008 | 更新日期: 2023-09-27 18:36:09

我有一个 asp.net 的C#项目,用于研究案例,"大学网站"

我有一个名为 Agenda 的表,它包含 9 列

[AgendaId]   uniqueidentifier
[MatirelId]
[InstructorId]
[ClassId]
[AddedDate]
[Semester]
[StartTime]
[EndTime]
[DaySchedule]

它显示了可用的材料,哪个教师,在哪几天,在什么时间开始和结束,在哪个班级,在同一学期。

我需要什么:当我添加新行时,我应该检查它是否是现有行的重叠。如果它有重叠,给我一个错误。

PS:instructorId,MatirelId和ClassId是其他表的外键。

最好在 SQL Server 2008 中的存储过程中执行此操作。

亲切和最好的问候

将多行与 SQL Server 2008 中的一行进行比较

假设所有列都必须匹配重复项 - 那么你将使用这样的东西:

CREATE PROCEDURE dbo.InsertNewRow 
    @AgendaId      uniqueidentifier.,
    @MatirelId     int,   -- you did not mention what *types* those columns have - adapt as needed!
    @InstructorId  int,
    @ClassId       int,
    @AddedDate     datetime,
    @Semester      int
    @StartTime     time(7),
    @EndTime       time(7),
    @DaySchedule   int
AS BEGIN
   IF EXISTS (SELECT * FROM dbo.Agenda 
              WHERE MatirelId = @MatirelId
                AND InstructorId = @InstructorId
                AND ClassId = @ClassId
                AND Semester = @Semester
                AND StartTime = @StartTime
                AND EndTime = @EndTime
                AND DaySchedule = @DaySchedule)
        RAISERROR .......
        RETURN
   INSERT INTO dbo.Agenda(AgendaId, MatirelId, InstructorId, ClassId, 
                          AddedDate, Semester, StartTime, EndTime, DaySchedule)
   VALUES(@AgendaId, @MatirelId, @InstructorId, @ClassId, 
          @AddedDate, @Semester, @StartTime, @EndTime, @DaySchedule)
END   

阅读出色的 MSDN 文档,了解如何准确调用RAISERROR以导致从存储过程中引发错误!