最近遇到乙個問題,乙個資料庫中有很多相近的表,已經有資料了,但是需要把主鍵修改為自動增長的,但是又不想刪除資料,只好先刪掉主鍵,然後再新增主鍵並設定自動增長。
因為這幾個表的主鍵名字是相同的,都是「kkkkkk」,我想用迴圈來實現,於是寫了個儲存過程,主要使用游標。
首先,查詢表名稱,主要通過sysobjects這個系統表
查詢表的主鍵約束
刪除主鍵約束
刪除主鍵
新增主鍵並設定自動增長
以上就是基本思路,剩下的就是迴圈了,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 批量刪除
sql server 批量刪除資料 建立表1 1 create table table1 23 id int primary keyidentity 1,1 4 msg varchar 24 5 loc varchar 24 6 style varchar 24 7 建立表2 1 表2 2creat...
SQL SERVER 批量刪除儲存過程
sqlserver 2005一次只能刪除乙個儲存過程,如果多了,需要很長時間才能刪完,所以寫了一段語句,直接就把當然資料庫下所有使用者自定義的儲存過程給drop了。不過使用都請留心,當前開啟的資料庫哦。下面貼 declare proccur cursor forselect name from sy...
sqlserver 2014 刪除主鍵約束
select from dict where dictcode and pid 5 truncate table menu select from sys.foreign keys where referenced object id object id menu 找到引用該錶的外來鍵 alter ...