Ste*_*tes 5 sql database sql-server
我有一个表称为Cases具有约访谈如信息IV_Date,IV_Length,Interviewer等我也有内的字段Cases被称为Case_Code(A varchar),它是一个六字符(三个字母+三个数字)标识符; 例如“ ABC123”或“ ZZZ999”。ContactID(an int)上有一个外键,它指向一个Contact表。我创建了一个计算列,它是此Cases表的PRIMARY KEY ,称为CaseID。CaseID仅仅是的串联Case_Code和ContactID。因此,ContactID为案例“ ZZZ99925”工作的“ 25”被指定CaseID为“ ZZZ99925”。既不Case_Code也不ContactID接受null,因此CaseID显然不接受。设置时CaseID我将其创建为NOT NULL,PRIMARY KEY,并使用了公式“ [Case_Code] + CONVERT([varchar],[contactID],0)”。我以为一切都很好,但是当我尝试重新排列SQL Studio表设计视图中的任何字段时,会抛出此错误:
'Cases (dbo)' table
- Unable to create index 'PK_Cases_1'.
Cannot define PRIMARY KEY constraint on nullable column in table 'Cases'.
Could not create constraint. See previous errors.'
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会收到此错误,因为表中的所有NOT NULL列都包含数据。任何帮助或想法将不胜感激。谢谢!
使用代码进行编辑:
CREATE TABLE [dbo].[Cases](
[ContactID] [int] NOT NULL,
[Case_Code] [varchar](16) NOT NULL,
[Assigned_To] [varchar](100) NULL,
[LEK_Interviewer] [varchar](255) NULL,
[Case_Notes] [varchar](max) NULL,
[IV_Status] [varchar](100) NULL,
[IV_Quality] [numeric](18, 0) NULL,
[IV_Date] [date] NULL,
[IV_Length] [varchar](50) NULL,
[Address] [varchar](100) NULL,
[City] [varchar](100) NULL,
[State] [varchar](50) NULL,
[Zip] [varchar](25) NULL,
[Country] [varchar](50) NULL,
[Total_Honorarium] [money] NULL,
[Currency] [varchar](20) NULL,
[Last_Update] [varchar](50) NULL,
[CaseID] AS ([Case_Code]+CONVERT([varchar],[contactID],0)) PERSISTED NOT NULL,
CONSTRAINT [PK_Cases_1] PRIMARY KEY CLUSTERED
(
[CaseID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
小智 6
主键不能应用于具有空约束(可空)的列。创建表时,默认情况下,每列都是可为空的。
因此,首先,我们必须删除null约束并在该列上应用NOT NULL约束。为此,执行以下查询
ALTER TABLE tbl_name alter column column_name int NOT NULL
Run Code Online (Sandbox Code Playgroud)
之后,您可以在同一列上应用主键。为此,执行以下查询
ALTER TABLE tbl_name ADD PRIMARY KEY (column_name)
Run Code Online (Sandbox Code Playgroud)
我希望这能帮到您
dea*_*ean -1
不要使用计算列作为主键,这是非常糟糕的主意。在您的情况下,只需在 CaseCode 和 ContactID 列上定义 PK 即可。在设计器中,选择两列,右键单击并从菜单中选择“设置主键”。
| 归档时间: |
|
| 查看次数: |
28889 次 |
| 最近记录: |