根据其他表的外键插入表中

问题描述 投票:0回答:2

我有一张包含多个外键的表。当我将值插入其他表时,该表需要显示插入的外键。另外,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 
sql sql-server stored-procedures sql-insert
2个回答
0
投票

据我从您的代码中了解到,以下部分可能会出现问题

(sc.ContactDate = GETDATE())

在 where 条件下,铸造不是一个好的选择,但您可以尝试使用 as (Cast(sc.ContactDate as Date) = Cast(GETDATE()) as Date)


0
投票

最好的方法是声明一个变量并在 select 语句中使用它以提高性能 例子: 声明 @Curr_Date date =cast(Getdate() as date)

AND (sc.ContactDate = @Curr_Date)

© www.soinside.com 2019 - 2024. All rights reserved.