这些是我的表
CREATE TABLE Courses
(
Course_ID INT IDENTITY (100 , 10) NOT NULL ,
CONSTRAINT PK_Courses PRIMARY KEY (Course_ID)
Catalog_Course_ID NVARCHAR(10) NOT NULL,
CONSTRAINT FK_Catalog_Course_ID FOREIGN KEY (Course_Number_ID) REFERENCES Course_Catalog (Course_Number_ID)
Schedule_ID INT NOT NULL ,
CONSTRAINT FK_Schedule_ID FOREIGN KEY (Schedule_ID) REFERENCES Classs_Schedule(Schedule_ID)
S_Date DATE NOT NULL ,
E_Date DATE NOT NULL ,
)
CREATE TABLE Course_Management
(
Number INT IDENTITNY (1,1) PRIMARY KEY '
Course_ID INT NOT NULL ,
CONSTRAINT FK_Course_ID FOREIGN KEY (Course_ID) REFERENCES Courses (Course_ID)
Course_Date_Meeting DATE NOT NULL,
Duration INT NOT NULL ,
)
现在我要做的是将数据插入Courses
表格,Course_Management
将保留在课程中发生或将要发生的所有会议。
Schedule_ID
- 这几天课程开会,还有几个小时的时间。 Catalog_Course_ID
可以找到课程的总小时数因此,如果我使用Course_Number_ID
(来自目录课程表),Schedule_ID
和S.Date
(strat date)插入一个课程,触发器将找到我们应该做多少次会议(通过查找在找到所有会议后,课程持续时间除以会议持续时间,E.Date(结束日期)将作为最后插入的会议更新。
我写了这个触发器
CREATE TRIGGER CouseMetting
ON [dbo].[Courses] AFTER INSERT
AS
BEGIN
DECLARE @Course_ID INT --Last Course ID insert
SET @Course_ID = (Select @@IDENTITY)
DECLARE @CCID INT -- Course Catlog ID reference to CourseID last insert
SET @CCID = (SELECT [Course_Number_ID]
FROM [dbo].[Courses]
WHERE [Course_ID] = @Course_ID)
DECLARE @NUM INT -- Duration of the course in hours reference Course Catlog ID
SET @NUM = (select [Duration]
from [dbo].[Course_Catalog] where [Number_ID] = @CCID)
DECLARE @MET INT -- Numbers of meeting
DECLARE @DUR INT -- Duration of 1 meeting
DECLARE @DATE DATE -- Start date of the CourseID
SET @DATE = (SELECT [S_Date]
FROM [dbo].[Courses]
WHERE [Course_ID] = @Course_ID)
DECLARE @Holiday varchar (24) -- Holiday in Israel
DECLARE @DAY_NAME NVARCHAR(10) -- English day name
DECLARE @Schedule_ID INT
SET @Schedule_ID = (SELECT [Schedule_ID]
FROM [dbo].[Courses]
WHERE [Course_ID] = @Course_ID)
SET @DUR = (SELECT [Meeting_Dur]
FROM [dbo].[Classs_Schedule] WHERE [Schedule_ID] = @Schedule_ID)
SET @MET = @NUM/@dur
While @MET > 0
Begin
SET @Holiday = (SELECT [HolidayISR] FROM [dbo].[FullDates] WHERE [Date] = @DATE)
IF @Holiday IS NULL
BEGIN
INSERT INTO [dbo].[Course_Management] ([Course_ID] , [Course_Date_Meeting] ,[Duration] )
VALUES (@Course_ID , @DATE , @DUR )
SET @met = @met - 1
END
SET @DAY_NAME = (SELECT [DayName] FROM [dbo].[FullDates] WHERE [Date] = @DATE)
IF @Schedule_ID = 1
BEGIN
IF @DAY_NAME LIKE 'Sunday'
BEGIN
SET @DATE= DATEADD(DD , 2 , @DATE)
END
ELSE SET @DATE= DATEADD(DD , 5 , @DATE)
END
IF @Schedule_ID = 2
BEGIN
IF @DAY_NAME LIKE 'Sunday'
BEGIN
SET @DATE= DATEADD(DD , 3 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 4 , @DATE)
END
IF @Schedule_ID = 3
BEGIN
IF @DAY_NAME LIKE 'Sunday'
BEGIN
SET @DATE= DATEADD(DD , 4 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 3 , @DATE)
END
IF @Schedule_ID = 4
BEGIN
IF @DAY_NAME LIKE 'Sunday'
BEGIN
SET @DATE= DATEADD(DD , 2 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 5 , @DATE)
END
IF @Schedule_ID = 5
BEGIN
IF @DAY_NAME LIKE 'Sunday'
BEGIN
SET @DATE= DATEADD(DD , 3 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 4 , @DATE)
END
IF @Schedule_ID = 6
BEGIN
IF @DAY_NAME LIKE 'Sunday'
BEGIN
SET @DATE= DATEADD(DD , 4 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 3 , @DATE)
END
IF @Schedule_ID = 7
BEGIN
IF @DAY_NAME LIKE 'Monday'
BEGIN
SET @DATE= DATEADD(DD , 2 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 5 , @DATE)
END
IF @Schedule_ID = 8
BEGIN
IF @DAY_NAME LIKE 'Monday'
BEGIN
SET @DATE= DATEADD(DD , 3 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 4 , @DATE)
END
IF @Schedule_ID = 9
BEGIN
IF @DAY_NAME LIKE 'Monday'
BEGIN
SET @DATE= DATEADD(DD , 2 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 5 , @DATE)
END
IF @Schedule_ID = 10
BEGIN
IF @DAY_NAME LIKE 'Monday'
BEGIN
SET @DATE= DATEADD(DD , 3 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 4 , @DATE)
END
IF @Schedule_ID = 11
BEGIN
IF @DAY_NAME LIKE 'Tuesday'
BEGIN
SET @DATE= DATEADD(DD , 2 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 5 , @DATE)
END
IF @Schedule_ID = 12
BEGIN
IF @DAY_NAME LIKE 'Tuesday'
BEGIN
SET @DATE= DATEADD(DD , 2 , @DATE)
END
ELSE SET @DATE = DATEADD(DD , 5 , @DATE)
END
END
UPDATE [dbo].[Courses]
SET [E_Date] = (SELECT TOP 1 [Course_Date_Meeting]
FROM [dbo].[Course_Management]
WHERE Course_ID = @Course_ID
ORDER BY [Course_Date_Meeting] DESC )
END
Fulldates
表是保存所有日期和假日的表格,因此如果会议日期是某个假日,那么触发器现在将插入它并将继续下一次会议
现在,如果我使用Course_Number_ID
(来自目录课程表)和Schedule_ID
以及S.Date
插入一个课程,那么每件事都可以。
当我尝试为课程表插入多行时,它只适用于Course_Management
已插入的最后一行。
我有5K行表,包含Course_Number_ID,Schedule_ID,S.Date,我想插入它。
我还尝试逐行输入where子句并且它正在工作。
所以多行的唯一问题就在于它。
任何人都知道问题出在哪里?