34,590
社区成员
发帖
与我相关
我的任务
分享
SET IDENTITY_INSERT TableName OFF
1)测试的表的结构
CREATE TABLE for_CSDN
(ID INT IDENTITY(1,1),
V_name varchar(32))
2)ALT + F1 + 表名(for_CSDN)
可以看到
Identity Seed Increment Not For Replication
ID 1 1 0
3)操作取消字段的Identity属性步骤后
ALT + F1 + 表名(for_CSDN)
可以看到
Identity Seed Increment Not For Replication
No identity column defined. NULL NULL NULL
--创建测试表
CREATE TABLE t1(ID int IDENTITY,A int)
GO
--插入记录
INSERT t1 VALUES(1)
GO
--1. 将IDENTITY(标识)列变为普通列
ALTER TABLE t1 ADD ID_temp int
GO
UPDATE t1 SET ID_temp=ID
ALTER TABLE t1 DROP COLUMN ID
EXEC sp_rename N't1.ID_temp',N'ID',N'COLUMN'
INSERT t1 VALUES(100,9)
GO
--2. 将普通列变为标识列
CREATE TABLE t1_temp(ID int,A int IDENTITY)
SET IDENTITY_INSERT t1_temp ON
INSERT t1_temp(ID,A) SELECT * FROM t1
SET IDENTITY_INSERT t1_temp OFF
DROP TABLE T1
GO
EXEC sp_rename N't1_temp',N't1'
INSERT t1 VALUES(109999)
GO
--显示处理结果
SELECT * FROM t1
/*--结果:
ID A
----------------- -----------
1 1
100 9
109999 10
--*/
SQL语句实现取消自增列属性
由于在SQL-SERVER中,自增列属性不能直接修改,但可以通过以下方式变向实现
1、如果仅仅是指定值插入,可用以下语句,临时取消
SET IDENTITY_INSERT TableName ON
INSERT INTO tableName(xx,xx) values(xx,xx)
SET IDENTITY_INSERT TableName OFF
2、新增一列,删除自增列,修改改列名
alter table a add xxx int
update a set xxx=id
alter table a drop column id
exec sp_rename 'xxx', 'id', 'column'
3、通过修改系统关于该表的列属性,该方法使用不当将可能引起其它不可预料的错误
sp_configure 'allow update',1
reconfigure with override
go
update syscolumns set colstat=0 where colstat=1 and id=object_id('tablename')
go
sp_configure 'allow update',0
reconfigure with override