被引用表中没有与外键1中的引用列列表匹配的主键或候选键

时间:2018-08-11 13:36:42

标签: sql-server tsql

我知道这个问题已经问过好几次了,我已经阅读了所有答复,但仍然无法弄清楚。我有这些表,当我尝试创建它们时,出现上述错误。当我消除Userinfo表中的键之一时,代码可以正常工作,但是当我将其设为复合键时,代码却无法正常工作。我希望有人可以帮助我,我是SQL的新手。

df <- structure(list(Jun = 2616.54, Jul = 2616.363, Aug = 2388.369), 
 .Names = c("Jun", 
 "Jul", "Aug"), class = "data.frame", row.names = "1")

2 个答案:

答案 0 :(得分:0)

您的数据结构应如下所示:

CREATE TABLE [dbo].[UserInfo] (
    [UserId] int NOT NULL IDENTITY (1, 1) PRIMARY KEY,
    [strEmail] varchar(100) NOT NULL,
    [strLastName] varchar(50) NOT NULL DEFAULT 'N/A',
    [strFirstName] varchar(50) NOT NULL DEFAULT 'N/A',
    [strMiddleInitial] varchar(5) NOT NULL DEFAULT 'N/A',
    [strDSNPhone] varchar(10) NOT NULL DEFAULT 'N/A',
    [dCreationDate] date NOT NULL DEFAULT '1900-01-01',
    [dDD2875Approved] date NOT NULL DEFAULT '1900-01-01', 
    [dDD2875Expires] date NOT NULL DEFAULT '1900-01-01',
 );

 CREATE TABLE [dbo].[Files] (
     [FileID] bigint NOT NULL IDENTITY (1, 1),
     [strFileName] varchar(200) NULL,
     [strFilePath] varchar(400) NULL,
     [strFileDescription] varchar(200) NULL,
     [UserId] int NOT NULL REFERENCES user_info(UserId),
     [strEmail] varchar(100) NOT NULL    
 );

注意:

  • 您可以在表中添加主键和外键定义。
  • 当您有identity列时,就不需要复合主键。
  • 仅标识列应用作外键引用。
  • 您可能不想在文件表中重复诸如strEmail之类的信息。您可以使用JOIN进行查找。
  • 我不确定您对NULL的厌恶程度在UserInfo表中,但是大概您有充分的理由使用这种默认设置。

答案 1 :(得分:0)

[UserId] int NOT NULL IDENTITY (1, 1)是唯一的。
[strEmail] ASC添加到主键不会增加任何值。

在外键中添加[strEmail]不会增加任何值。

[strEmail]不应位于Files表中。