表中已经有数据了,该列也有数据,所以不能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就行了
如果在企业管理器里修改的话 就把字段的 "标识种子" ,"标识增量" 属性都填1就行了
#10
3楼的写的不错啊
#11
暴汗你们确定都试过没问题么?这段代码!
#12
#13
顶!
#14
IDENTITY(属性)
在表中创建一个标识列。该属性与 CREATE TABLE 及 ALTER TABLE Transact-SQL 语句一起使用。
说明 IDENTITY 属性与 SQL-DMO Identity 属性不同,后者表现列的行标识属性。
语法
IDENTITY [ ( seed , increment ) ]
参数
seed
装载到表中的第一个行所使用的值。
increment
增量值,该值被添加到前一个已装载的行的标识值上。
必须同时指定种子和增量,或者二者都不指定。如果二者都未指定,则取默认值 (1,1)。
在表中创建一个标识列。该属性与 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就行了
如果在企业管理器里修改的话 就把字段的 "标识种子" ,"标识增量" 属性都填1就行了
#10
3楼的写的不错啊
#11
暴汗你们确定都试过没问题么?这段代码!
#12
#13
顶!
#14
IDENTITY(属性)
在表中创建一个标识列。该属性与 CREATE TABLE 及 ALTER TABLE Transact-SQL 语句一起使用。
说明 IDENTITY 属性与 SQL-DMO Identity 属性不同,后者表现列的行标识属性。
语法
IDENTITY [ ( seed , increment ) ]
参数
seed
装载到表中的第一个行所使用的值。
increment
增量值,该值被添加到前一个已装载的行的标识值上。
必须同时指定种子和增量,或者二者都不指定。如果二者都未指定,则取默认值 (1,1)。
在表中创建一个标识列。该属性与 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)来修改啊!