【问题标题】:How to reference two tables in Visual Studio 2012 by adding foreign key?如何通过添加外键来引用 Visual Studio 2012 中的两个表?
【发布时间】:2013-05-25 15:21:16
【问题描述】:

我在向表列添加外键时遇到问题。 我的桌子是这样的。我需要将ContactOwnerIdContact 表引用到UserIdUserProfile 表中

CREATE TABLE [dbo].[Contacts] (
    [ContactId] INT            IDENTITY (1, 1) NOT NULL,
    [ContactOwnerId]    INT            NOT NULL,
    [FirstName] NVARCHAR (MAX) NOT NULL,
    [LastName]  NVARCHAR (MAX) NOT NULL,
    [Address]   NVARCHAR (MAX) NOT NULL,
    [City]      NVARCHAR (MAX) NOT NULL,
    [Phone]     NVARCHAR (MAX) NOT NULL,
    [Email]     NVARCHAR (MAX) NOT NULL,
    CONSTRAINT [PK_dbo.Contacts] PRIMARY KEY CLUSTERED ([ContactId] ASC), 
    CONSTRAINT [FK_Contacts_UserProfile] FOREIGN KEY ([UserId]) REFERENCES [Contacts]([ContactOwnerId])
);

CREATE TABLE [dbo].[UserProfile] (
    [UserId]   INT           IDENTITY (1, 1) NOT NULL,
    [UserName] NVARCHAR (56) NOT NULL,
    PRIMARY KEY CLUSTERED ([UserId] ASC),
    UNIQUE NONCLUSTERED ([UserName] ASC)
);

我加了一个外键,但是好像不对,因为UserId高亮了,报错:

SQL71501 :: Foreign Key: [dbo].[FK_Contacts_UserProfile] has an unresolved reference to Column [dbo].[Contacts].[UserId].
SQL71516 :: The referenced table '[dbo].[Contacts]' contains no primary or candidate keys that match the referencing column list in the foreign key. If the referenced column is a computed column, it should be persisted.

如何正确引用这两个表?提前致谢。

编辑 我确实像 sgeddes 说的那样。但是当我尝试创建联系人时出现错误。 INSERT 语句与 FOREIGN KEY 约束“FK_Contacts_UserProfile”冲突。冲突发生在数据库“ContactAppContext”、表“dbo.UserProfile”、列“UserId”中。 该语句已终止。

如果我删除外键,我不会收到任何错误。

我想要实现的是,当用户创建联系人时,他的 Id(UserId) 可以与 ContactOwnerId 关联,以便联系人可以与一个特定的用户相关。

【问题讨论】:

    标签: sql database tsql foreign-keys


    【解决方案1】:

    由于联系人表中的ContactOwnerId 应该是FOREIGN KEY,因此您需要在CONSTRAINT 中指定它而不是UserId。

    我认为这就是你想要做的:

    CREATE TABLE [dbo].[UserProfile] (
        [UserId]   INT           IDENTITY (1, 1) NOT NULL,
        [UserName] NVARCHAR (56) NOT NULL,
        PRIMARY KEY CLUSTERED ([UserId] ASC),
        UNIQUE NONCLUSTERED ([UserName] ASC)
    );
    
    CREATE TABLE [dbo].[Contacts] (
        [ContactId] INT            IDENTITY (1, 1) NOT NULL,
        [ContactOwnerId]    INT            NOT NULL,
        [FirstName] NVARCHAR (MAX) NOT NULL,
        [LastName]  NVARCHAR (MAX) NOT NULL,
        [Address]   NVARCHAR (MAX) NOT NULL,
        [City]      NVARCHAR (MAX) NOT NULL,
        [Phone]     NVARCHAR (MAX) NOT NULL,
        [Email]     NVARCHAR (MAX) NOT NULL,
        CONSTRAINT [PK_dbo.Contacts] PRIMARY KEY CLUSTERED ([ContactId] ASC), 
        CONSTRAINT [FK_Contacts_UserProfile] FOREIGN KEY ([ContactOwnerId]) REFERENCES [UserProfile]([UserId])
    );
    

    问题出在最后一行。您需要首先引用 Contacts 表中的列,然后指向您的 UserProfile 表。你倒过来了。

    Here's a SQL Fiddle

    这里有一些用于创建 FOREIGN KEY CONSTRAINTS 的文档/示例:

    http://msdn.microsoft.com/en-us/library/aa258255(v=sql.80).aspx

    【讨论】:

    • @KirillRyzhkov -- np,很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多