Sql Server批量删除主键,添加自增长主键

最近遇到一个问题,一个数据库中有很多相近的表,已经有数据了,但是需要把主键修改为自动增长的,但是又不想删除数据,只好先删掉主键,然后再添加主键并设置自动增长。

因为这几个表的主键名字是相同的,都是“KKKKKK”,我想用循环来实现,于是写了个存储过程,主要使用游标。

  1. 首先,查询表名称,主要通过sysObjects这个系统表
  2. 查询表的主键约束
  3. 删除主键约束
  4. 删除主键
  5. 添加主键并设置自动增长

以上就是基本思路,剩下的就是循环了,sql server只有while循环,可以用游标来读取sql查询结果,代码如下:

BEGIN
DECLARE @tableName varchar(100);
	DECLARE test_curse CURSOR FAST_FORWARD FOR
	select name from sysobjects where type='u' and name like 'B[_]__';
	OPEN test_curse;
	FETCH NEXT FROM test_curse INTO @tableName;
	WHILE @@fetch_status=0
	BEGIN
		declare @PK varchar(100) ; 
		select @PK=name from sysobjects where xtype='PK' and parent_obj=object_id(@tableName);
		PRINT @PK;
		exec ('alter table '+ @tableName+' drop CONSTRAINT '+@PK);
		EXEC('alter table '+ @tableName+' drop column KKKKKK');
		EXEC('ALTER TABLE '+ @tableName+' ADD  KKKKKK DECIMAL(32) IDENTITY(1,1) PRIMARY KEY');
		FETCH NEXT FROM test_curse INTO @tableName;
END;
CLOSE test_curse;
DEALLOCATE test_curse;
END



你可能感兴趣的:(Sql Server批量删除主键,添加自增长主键)