sql - 如何正确创建以 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
解决方案
首先,作为主键一部分的所有列都必须不为空。
然后定义键只需将所有列添加为逗号分隔列表。
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)。
推荐阅读
- python - Python循环迭代替换列表时间序列中的空值
- javafx - SwingFXUtils 发生了什么?
- npm - 为什么 Lerna 在根项目中创建大量 .tgz 文件?
- python - Selenium Python:如何在不针对特定类/id/tag 的情况下获取 css
- postgresql - 从 Heroku 服务器检索文件
- r - roxygen2 链接整个函数家族
- python - 如何在 tkinter 窗口中显示多个图像?
- javascript - 选择带有 JS 事件监听器的细分
- json - 使用 jq 获取列表项的每个类别计数
- swift - NSPredicate 快速用于空字符串