我有一张包含多个外键的表。当我将值插入其他表时,该表需要显示插入的外键。另外,ContactDate 应该是当前日期。
当我尝试执行以下命令时,我只插入了ContactDetails,其余的都是NULL。
EXEC usp_addQuickContacts '[email protected]','John
Lasseter','Minnie getting Homework Support from John','Homework
Support'
我也尝试过将它们一一插入而不是内连接,但结果没有排列在同一行。
CREATE OR ALTER PROCEDURE usp_addQuickContacts
(
@StudentEmail VARCHAR(100),
@EmployeeName NVARCHAR(100),
@ContactDetails NVARCHAR(200),
@ContactType NVARCHAR(100)
)
AS
BEGIN
IF @contactDetails NOT IN (SELECT ContactDetails FROM StudentContacts)
INSERT INTO StudentContacts(ContactDetails)
VALUES (@contactDetails )
IF @StudentEmail NOT IN (SELECT Email From StudentInformation)
INSERT INTO StudentInformation(Email)
VALUES (@StudentEmail )
IF @contactType NOT IN (SELECT ContactType FROM ContactType)
INSERT INTO ContactType (ContactType)
VALUES (@contactType)
IF @EmployeeName NOT IN (SELECT EmployeeName FROM Employees)
INSERT INTO Employees (EmployeeName)
VALUES (@EmployeeName )
INSERT INTO StudentContacts(StudentID, EmployeeID, ContactDetails, ContactDate, ContactTypeID)
SELECT si.StudentID, e.EmployeeID, sc.ContactDetails, sc.ContactDate,ct.ContactTypeID
FROM StudentContacts sc
INNER JOIN StudentInformation si ON sc.StudentID = si.StudentID
INNER JOIN Employees e ON e.EmployeeID = sc.EmployeeID
INNER JOIN ContactType ct ON ct.ContactTypeID = sc.ContactTypeID
INNER JOIN StudentContacts scs ON scs.ContactDate = sc.ContactDate
WHERE (ct.ContactType= @ContactType) AND (si.Email = @StudentEmail) AND (e.EmployeeNAME = @EmployeeName ) AND (sc.ContactDetails = @contactDetails) AND (sc.ContactDate = GETDATE())
END
据我从您的代码中了解到,以下部分可能会出现问题
(sc.ContactDate = GETDATE())
在 where 条件下,铸造不是一个好的选择,但您可以尝试使用 as (Cast(sc.ContactDate as Date) = Cast(GETDATE()) as Date)
最好的方法是声明一个变量并在 select 语句中使用它以提高性能 例子: 声明 @Curr_Date date =cast(Getdate() as date)
AND (sc.ContactDate = @Curr_Date)