我设置了一个目前没有主键的表.我需要做的就是加一个primary key, no null, auto_increment.

我正在处理一个Microsoft SQL Server数据库.我知道这不可能在一个命令中完成,但我try 的每个命令都会不断返回语法错误.

编辑---------------

我已经创建了主键,甚至将其设置为非空.然而,我无法设置auto_increment.

我试过:

ALTER TABLE tableName MODIFY id NVARCHAR(20) auto_increment
ALTER TABLE tableName ALTER COLUMN id NVARCHAR(20) auto_increment
ALTER TABLE tableName MODIFY id NVARCHAR(20) auto_increment
ALTER TABLE tableName ALTER COLUMN id NVARCHAR(20) auto_increment

我使用NVARCHAR是因为它不允许我在int下设置NOT NULL

推荐答案

它可以在一个命令中完成.您需要设置"自动编号"的标识属性:

ALTER TABLE MyTable ADD mytableID int NOT NULL IDENTITY (1,1) PRIMARY KEY

更准确地说,要设置命名表级约束:

ALTER TABLE MyTable
   ADD MytableID int NOT NULL IDENTITY (1,1),
   CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (MyTableID)

参见MSDN上的ALTER TABLE and IDENTITY

Sql相关问答推荐

如何编写SQL查询,在2024年每月的第一个日期输出货币?

按CTE创建任务表

SQL查询以条件空值跟踪生产操作结果进展

将主表与历史表连接以获取主表的当前汇率以及历史表中的上一个和最后一个汇率

如何在Presto中将多个列合并到一个数组中

防止ActiveRecord迁移在db/structure.sql中进行巨大更改

按属性值 Select 数组元素Postgres Jsonb

嵌套Json对象的SQL UPDATE WHERE

如何将insert语句重复n次使一个值递增?

将伪数据插入Postgres表

为什么SQL in中的空子查询有时被视为null

SQL JSON_QUERY 使用列中的值构造 json 路径并接收错误

显示所有组并计算给定组中的项目(包括 0 个结果)

如何计算两个非周期性时间序列+分组的重叠持续时间

SQL Server - 判断 ids 层次 struct 中的整数 (id)

PostgreSQL - 递归地聚合来自不同列的属性

交叉应用 OPENJSON / PIVOT - 错误的顺序

在 Athena / Presto 中提取 JSON 对象以获取动态密钥

如何跨行合并以删除 SQL 中的空值?

snowfalke 会在 Select 运行时锁定表吗?