將一個表中個某一列修正為主動增加的辦法。本站提示廣大學習愛好者:(將一個表中個某一列修正為主動增加的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是將一個表中個某一列修正為主動增加的辦法正文
昨天有位先生問我“一個表曾經建好了,能不克不及將外面的一個字段改成主動增加?”,“能,但沒有需要去修正它,應當在建表的時刻就設計好” 我說。 這時候候他和另外一位先生
評論辯論起來。他認為可以,另外一位試過說不可。由於他們不是我帶班級的先生,他們也征詢了本身的先生,所以我沒有再揭橥看法。
需求:
若何將一張表中個某一列修正為主動增加的。
解答:
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
總結:在表設計界面修正最為簡略。假如該列已有的數據中存,修正能夠會激發異常,可使用數據導入導出的方法處理。總之,不論應用何種方法,都需求提早對數據做好備份。