sql - 如何通过添加外键在 Visual Studio 2012 中引用两个表?

标签 sql database tsql foreign-keys

我在向表列添加外键时遇到问题。 我的 table 看起来是这样的。我需要将 Contact 表中的 ContactOwnerId 引用到 UserProfile 表中的 UserId

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相关联,这样联系人就可以关联到一个特定的用户。

最佳答案

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

关于sql - 如何通过添加外键在 Visual Studio 2012 中引用两个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751000/

相关文章:

mysql - SQL 删除与子查询

sql - 如何从外键链接的多个表中虚拟删除数据?

mysql - 为什么 ENUM 不在 MySQL 中存储多个值?

mysql - SQL JOIN 2 条件

sql - 从一列创建多列

MySQL 4.0.16 更新表不带子查询

sql - 日期格式 : Invalid Month

物理硬件的数据库设计

sql-server - 添加具有生成名称的 DEFAULT 约束

SQL 游标...您会捍卫任何用例?