SQL如何设置自动增长列

时间:2022-03-23 04:23:23
如何将一个表中个某一列设为自动增长的。
表中已经有数据了,该列也有数据,所以不能drop column然后再add column

有没有什么办法可以直接修改表结构,把字段设置成自动增长。而不是删掉字段再加字段。

18 个解决方案

#1


alter 

#2


alter .......

#3


alert table tablename alert column columnname int identity

#4


alter table tablename alter column columnname int identity

#5


alter 

#6


楼上正解

#7


alter table table_name alter column column_name int identity

#8



正确啊

#9


很多人已经回答了

如果在企业管理器里修改的话  就把字段的  "标识种子" ,"标识增量" 属性都填1就行了

#10


3楼的写的不错啊

#11


暴汗你们确定都试过没问题么?这段代码!

#12


该回复于2011-01-05 08:47:59被版主删除

#13


引用 11 楼 cr890925 的回复:
暴汗你们确定都试过没问题么?这段代码!


顶!

#14


IDENTITY(属性)
在表中创建一个标识列。该属性与 CREATE TABLE 及 ALTER TABLE Transact-SQL 语句一起使用。



说明  IDENTITY 属性与 SQL-DMO Identity 属性不同,后者表现列的行标识属性。 


语法
IDENTITY [ ( seed , increment ) ]

参数
seed

装载到表中的第一个行所使用的值。

increment

增量值,该值被添加到前一个已装载的行的标识值上。

必须同时指定种子和增量,或者二者都不指定。如果二者都未指定,则取默认值 (1,1)。

#15


create table tb(id int,col varchar(10))
insert into tb select 5,'aaa' union all select 8,'ccc' union all select 17,'ccc'
go
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_tb
(
id int NOT NULL IDENTITY (1, 1),
col varchar(10) NULL
)  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_tb ON
GO
IF EXISTS(SELECT * FROM dbo.tb)
 EXEC('INSERT INTO dbo.Tmp_tb (id, col)
SELECT id, col FROM dbo.tb WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_tb OFF
GO
DROP TABLE dbo.tb
GO
EXECUTE sp_rename N'dbo.Tmp_tb', N'tb', 'OBJECT' 
GO
COMMIT
go
insert into tb select 'eee'
select * from tb
/*
id          col
----------- ----------
5           aaa
8           ccc
17          ccc
18          eee

(4 行受影响)
*/
drop table tb

#16


强大啊

#17


同意14楼

#18


identity也是字段的一个属性啊,可以通过alter table [table_name] alter [column_name] [type] identity(1,1)来修改啊!

#1


alter 

#2


alter .......

#3


alert table tablename alert column columnname int identity

#4


alter table tablename alter column columnname int identity

#5


alter 

#6


楼上正解

#7


alter table table_name alter column column_name int identity

#8



正确啊

#9


很多人已经回答了

如果在企业管理器里修改的话  就把字段的  "标识种子" ,"标识增量" 属性都填1就行了

#10


3楼的写的不错啊

#11


暴汗你们确定都试过没问题么?这段代码!

#12


该回复于2011-01-05 08:47:59被版主删除

#13


引用 11 楼 cr890925 的回复:
暴汗你们确定都试过没问题么?这段代码!


顶!

#14


IDENTITY(属性)
在表中创建一个标识列。该属性与 CREATE TABLE 及 ALTER TABLE Transact-SQL 语句一起使用。



说明  IDENTITY 属性与 SQL-DMO Identity 属性不同,后者表现列的行标识属性。 


语法
IDENTITY [ ( seed , increment ) ]

参数
seed

装载到表中的第一个行所使用的值。

increment

增量值,该值被添加到前一个已装载的行的标识值上。

必须同时指定种子和增量,或者二者都不指定。如果二者都未指定,则取默认值 (1,1)。

#15


create table tb(id int,col varchar(10))
insert into tb select 5,'aaa' union all select 8,'ccc' union all select 17,'ccc'
go
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_tb
(
id int NOT NULL IDENTITY (1, 1),
col varchar(10) NULL
)  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_tb ON
GO
IF EXISTS(SELECT * FROM dbo.tb)
 EXEC('INSERT INTO dbo.Tmp_tb (id, col)
SELECT id, col FROM dbo.tb WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_tb OFF
GO
DROP TABLE dbo.tb
GO
EXECUTE sp_rename N'dbo.Tmp_tb', N'tb', 'OBJECT' 
GO
COMMIT
go
insert into tb select 'eee'
select * from tb
/*
id          col
----------- ----------
5           aaa
8           ccc
17          ccc
18          eee

(4 行受影响)
*/
drop table tb

#16


强大啊

#17


同意14楼

#18


identity也是字段的一个属性啊,可以通过alter table [table_name] alter [column_name] [type] identity(1,1)来修改啊!