2017-11-13 1 views
0

ÜBERPRÜFEn ich eine Tabelle in meiner Datenbank hinzufügen:Syntax für eingefügten Wert gegen einen anderen Tisch des

***Enrollments*** 
CourseID 
Student ID 
EnrollmentDateTime 

Ich habe bereits eine Tabelle:

***Courses***  
CourseID  
StartDate 

Wenn jemand Daten in die Einschreibungen Tabelle eingefügt wird, Ich möchte prüfen, ob das Anmeldedatum kleiner ist als/vor dem Startdatum; Ich weiß, was zu tun ist, aber mir fehlt die Syntax dafür. Bisher habe ich folgendes, aber ich weiß nicht, wie ich vorgehen soll.

Create Table Enrollments(
    StudentID int NOT NULL Foreign Key REFERENCES dbo.Students(StudentID), 
    CourseID int NOT NULL Foreign Key REFERENCES dbo.Courses(CourseID), 
    EnrollmentDateTime Datetime NOT NULL CHECK (dbo.fCheckDate(EnrollmentDateTime, CourseID) = 1)) 

...

create function dbo.fCheckDate (@StartDate Datetime, @CourseID int) 
Returns bit 
AS 
Begin 
Return(SELECT E.StartDate 
    FROM dbo.Enrollments E 
    WHERE @CourseID = E.CourseID 
End 
go 

Antwort

0

Solche funktionsbasierte Kontrollen sind recht teuer. Sie benötigen jedoch eine Funktion, um das Kursdatum zurückzugeben:

create function dbo.getStartDate (@CourseID int) 
Returns datetime 
AS 
Begin 
    Return (SELECT c.StartDate 
      FROM dbo.Courses c 
      WHERE c.CourseID = @CourseID 
      ); 
End; 

Create Table Enrollments (
    StudentID int NOT NULL Foreign Key REFERENCES dbo.Students(StudentID), 
    CourseID int NOT NULL Foreign Key REFERENCES dbo.Courses(CourseID), 
    EnrollmentDateTime Datetime NOT NULL CHECK (EnrollmentDateTime < getStartDate(CourseID)) 
); 
Verwandte Themen