如何在表之间使用外键

时间:2019-06-20 03:50:30

标签: mysql sql

我正在尝试在表中创建新行,但遇到了forgienKey错误。

很显然,我尝试在父表中创建新行,但是仍然遇到错误

// error: cannot implicitly convert type 'TEntity' to 'TResult'
if (selector == null) selector = x => x;
if (selector == null) selector = x => TEntity;
if (selector == null) selector = x => (default)TEntity;
if (selector == null) selector = x => (TResult)x;
if (selector == null) selector = x => x as TResult;

-编写一条语句,在Employees表中创建一个代表您的行,而无需使用VALUES关键字

CREATE TABLE dbo.Contacts
    (
        ContactId INT NOT NULL IDENTITY(1, 1) PRIMARY KEY ,
        Active BIT NOT NULL
            CONSTRAINT DF_Contacts_Active
                DEFAULT ( 1 ) ,
        FirstName NVARCHAR(100) ,
        MiddleName NVARCHAR(100) ,
        LastName NVARCHAR(100) ,
        DOB DATE ,
        ModifiedDate DATETIME
            CONSTRAINT DF_Contacts_ModifiedDate
                DEFAULT ( GETDATE())
    );


INSERT dbo.Contacts ( Active ,
                      FirstName ,
                      MiddleName ,
                      LastName ,
                      DOB ,
                      ModifiedDate )
VALUES ( 0, N'William', N'James', N'Murray', '9/21/1950', '1/1/2018 3:01:47' ) ,
       ( 1, N'Judith', N'Olivia', N'Dench', '12/9/1934', '3/10/2011 17:52:00' ) ,
       ( 1, N'Terry', N'Alan', N'Crews', '7/30/1968', '9/28/2014 12:41:31' ) ,
       ( 1, N'Pamela', N'Suzette', N'Grier', '5/26/1949', '1/1/2018 11:52:23' ) ,
       ( 1, 'John', 'S.', 'Doe', '1/1/2000', '7/10/2018 19:43:22' ) ,
       ( 1, 'Jane', 'K.', 'Smith', '4/16/1987', '2/2/2015 9:00:00' ) ,
       ( 1, 'Henry', 'D.', 'Williams', '7/21/92', '5/18/17 7:29:10' ) ,
       ( 1, 'Jessica', 'L.', 'Jones', '8/30/88', '9/19/10 10:28:51' );

CREATE TABLE dbo.Employees
    (
        EmployeeId INT NOT NULL IDENTITY(1, 1) PRIMARY KEY ,
        FirstName NVARCHAR(100) ,
        LastName NVARCHAR(100) ,
        ContactId INT NOT NULL
            CONSTRAINT FK_Employees_ContactId_ref_Contacts_ContactId
            REFERENCES dbo.Contacts ( ContactId ) ,
        ManagerId INT
    );

INSERT dbo.Employees ( FirstName ,
                       LastName ,
                       ContactId ,
                       ManagerId )
VALUES ( N'John', N'Doe', 5, NULL ) ,
       ( 'Jane', 'Smith', 6, 1 ) ,
       ( 'Henry', 'Williams', 7, 2 ) ,
       ( 'Jessica', 'Jones', 8, 3 );

1 个答案:

答案 0 :(得分:0)

要在Employee表中插入Alan Terry

INSERT into Employees 
SELECT FirstName, LastName, ContactId, NULL FROM Employees
WHERE ContactId = 3

将John Doe任命为Alan经理

Update Employees
SET ManagerID = 1
WHERE EmployeeId = 5