我在向表列添加外键时遇到问题。
我的 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 表。你倒退了。
这里有一些用于创建 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/