1

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

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

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

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

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

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

更喜欢在 SQL Server 2008 的存储过程中创建它。

亲切和最诚挚的问候

4

1 回答 1

2

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

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以从存储过程中引发错误!

于 2012-06-04T13:27:50.647 回答