程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 將一個表中個某一列修正為主動增加的辦法

將一個表中個某一列修正為主動增加的辦法

編輯:MSSQL

將一個表中個某一列修正為主動增加的辦法。本站提示廣大學習愛好者:(將一個表中個某一列修正為主動增加的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是將一個表中個某一列修正為主動增加的辦法正文


昨天有位先生問我“一個表曾經建好了,能不克不及將外面的一個字段改成主動增加?”,“能,但沒有需要去修正它,應當在建表的時刻就設計好” 我說。 這時候候他和另外一位先生
評論辯論起來。他認為可以,另外一位試過說不可。由於他們不是我帶班級的先生,他們也征詢了本身的先生,所以我沒有再揭橥看法。

需求:
若何將一張表中個某一列修正為主動增加的。

解答:
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

總結:在表設計界面修正最為簡略。假如該列已有的數據中存,修正能夠會激發異常,可使用數據導入導出的方法處理。總之,不論應用何種方法,都需求提早對數據做好備份。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved