將一個表中個某一列修正為主動增加的辦法。本站提示廣大學習愛好者:(將一個表中個某一列修正為主動增加的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是將一個表中個某一列修正為主動增加的辦法正文
昨天有位先生問我“一個表曾經建好了,能不克不及將外面的一個字段改成主動增加?”,“能,但沒有需要去修正它,應當在建表的時刻就設計好” 我說。 這時候候他和另外一位先生
評論辯論起來。他認為可以,另外一位試過說不可。由於他們不是我帶班級的先生,他們也征詢了本身的先生,所以我沒有再揭橥看法。
需求:
若何將一張表中個某一列修正為主動增加的。
解答:
1) 情形一:表中沒稀有據, 可使用 drop column然後再add column
alter table 表名 drop column 列名
alter table表名 add列名 int identity(1,1)
2) 情形二:表中曾經存在一部門數據
/**************** 預備情況********************/ --斷定能否存在test表 if object_id(N'test',N'U') is not null drop table test --創立test表 create table test ( id int not null, name varchar(20) not null ) --拔出暫時數據 insert into test values (1,'成龍') insert into test values (3,'章子怡') insert into test values (4,'劉若英') insert into test values (8,'王菲') select * from test /**************** 完成更改主動增加列********************/ begin transaction create table test_tmp ( id int not null identity(1,1), name varchar(20) not null ) go set identity_insert test_tmp on go if exists(select * from test) exec(' insert into test_tmp(id, name ) select id, name from test with(holdlock tablockx)') go set identity_insert test_tmp off go drop table test go exec sp_rename N'test_tmp' ,N'test' , 'OBJECT' go commit GO /****************驗證成果*****************/ insert into test values ('張曼') select * from test
總結:在表設計界面修正最為簡略。假如該列已有的數據中存,修正能夠會激發異常,可使用數據導入導出的方法處理。總之,不論應用何種方法,都需求提早對數據做好備份。