Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果我没有为列设置标识,如何插入行并获取增量值?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 如果我没有为列设置标识,如何插入行并获取增量值?

Sql 如果我没有为列设置标识,如何插入行并获取增量值?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个主键为ShopId(设置为非唯一)的表 脚本添加ShopId为的行,如下所示(主键) 当我使用INSERT语句时,我想添加一个ShopId为601(自动递增)的新行 我想知道是否有可能在DB级别自动执行此操作 CREATE TABLE dbo.Shops (ShopId int NOT NULL CONSTRAINT PK_Shops_ShopId PRIMARY KEY, Name nvarchar(64) NOT NULL, LocationId int NOT NULL )

我有一个主键为ShopId(设置为非唯一)的表

脚本添加ShopId为的行,如下所示(主键)

当我使用INSERT语句时,我想添加一个ShopId为601(自动递增)的新行

我想知道是否有可能在DB级别自动执行此操作

CREATE TABLE dbo.Shops
(ShopId int NOT NULL CONSTRAINT PK_Shops_ShopId PRIMARY KEY, 
Name nvarchar(64) NOT NULL, 
LocationId int NOT NULL )

根据您的评论,您的脚本必须只运行一次

因此,将列声明为
identity
,对于脚本,可以使用

SET IDENTITY_INSERT db_name.table_name ON
run the script
SET IDENTITY_INSERT db_name.table_name OFF
这允许您在
IDENTITY
列中插入值

之后,增量将从最高值+1开始


请参见

对不起,输入错误,我需要601,我已编辑了我的问题。根据定义,主键是唯一的。你为什么要这样做?我很抱歉,也许我在表格中犯了一个错误,没有设置身份。请添加一条评论,说明我在投票时应该改进的地方。谢谢如果你试图改变你自己的身份,你将经历一个漫长而痛苦的过程。如果您的系统中一次只有一个用户,那么这是非常简单的。但是,一旦添加第二个用户,就必须处理并发问题。这很快就会成为一种痛苦。您将需要大量代码来正确处理此问题。我的建议是,不要这样做。使用标识重新创建您的表,避免许多麻烦。
SET IDENTITY_INSERT db_name.table_name ON
run the script
SET IDENTITY_INSERT db_name.table_name OFF