首页 > 解决方案 > 如何正确创建以 3 列为主键的表?

问题描述

我已经使用 SQL 3 个月了,我想知道创建一个以 3 列作为主键的表,任何帮助都会非常感谢。

下面的代码是创建表的脚本,生成了我的表的 SQL Server Management Studio

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[REP]
(
     [id] [UNIQUEIDENTIFIER] ROWGUIDCOL  NOT NULL,
     [id_client] [NCHAR](30) NULL,
     [id_representant] [UNIQUEIDENTIFIER] NULL,
     [date_debut] [DATE] NULL,
     [date_fin] [DATE] NULL,

     CONSTRAINT [PK_REP] 
         PRIMARY KEY CLUSTERED ([id] ASC) 
                     WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                           IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,  
                           ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[REP] 
    ADD CONSTRAINT [DF_REP_id] DEFAULT (NEWID()) FOR [id]
GO

标签: sqlsql-server

解决方案


首先,作为主键一部分的所有列都必须不为空。

然后定义键只需将所有列添加为逗号分隔列表。

CREATE TABLE [dbo].[REP](
[id] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
[id_client] [nchar](30) NOT NULL,
[id_representant] [uniqueidentifier] NULL,
[date_debut] [date] NULL,
[date_fin] [date] NULL,
 CONSTRAINT [PK_REP] PRIMARY KEY CLUSTERED 
( [id] ASC,id_client ASC )
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

在上面的代码中,我将列 id_client 更改为不为空,并将其添加到主键的定义中......([id] ASC,id_client ASC)。


推荐阅读