將一個表中個某一列修改為自動增長的方法
昨天有位學(xué)生問我“一個表已經(jīng)建好了,能不能將里面的一個字段改為自動增長?”,“能,但沒有必要去修改它,應(yīng)該在建表的時候就設(shè)計好” 我說。 這時候他和另一位學(xué)生
討論起來。他覺得可以,另一位試過說不行。因為他們不是我?guī)О嗉壍膶W(xué)生,他們也咨詢了自己的老師,所以我沒有再發(fā)表意見。
需求:
如何將一張表中個某一列修改為自動增長的。
解答:
1) 情景一:表中沒有數(shù)據(jù), 可以使用 drop column然后再add column
alter table 表名 drop column 列名
alter table表名 add列名 int identity(1,1)
2) 情景二:表中已經(jīng)存在一部分?jǐn)?shù)據(jù)
/**************** 準(zhǔn)備環(huán)境********************/ --判斷是否存在test表 if object_id(N'test',N'U') is not null drop table test --創(chuàng)建test表 create table test ( id int not null, name varchar(20) not null ) --插入臨時數(shù)據(jù) insert into test values (1,'成龍') insert into test values (3,'章子怡') insert into test values (4,'劉若英') insert into test values (8,'王菲') select * from test /**************** 實現(xiàn)更改自動增長列********************/ 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 /****************驗證結(jié)果*****************/ insert into test values ('張曼') select * from test
總結(jié):在表設(shè)計界面修改最為簡單。如果該列已有的數(shù)據(jù)中存,修改可能會引發(fā)異常,可以使用數(shù)據(jù)導(dǎo)入導(dǎo)出的方式解決。總之,不管使用何種方式,都需求提前對數(shù)據(jù)做好備份。
相關(guān)文章
解決SQL Server的“此數(shù)據(jù)庫沒有有效所有者”問題
解決SQL Server的“此數(shù)據(jù)庫沒有有效所有者”問題,需要的朋友可以參考下。2011-12-12Sql Server2012 使用IP地址登錄服務(wù)器的配置圖文教程
最近在使用NFineBase框架+c#做一個系統(tǒng)的時候,在使用sql server 2012 連接數(shù)據(jù)庫的時候,在使用過程中遇到了幾個問題,下面小編給大家分享Sql Server2012 使用IP地址登錄服務(wù)器的配置圖文教程,一起學(xué)習(xí)吧2017-07-07SQLServer觸發(fā)器創(chuàng)建、刪除、修改、查看示例代碼
觸發(fā)器是一種特殊的存儲過程﹐它不能被顯式地調(diào)用﹐而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地激活。所以觸發(fā)器可以用來實現(xiàn)對表實施復(fù)雜的完整性約束。2010-06-06SQLSERVER 根據(jù)地圖經(jīng)緯度計算距離差示例
SQL SERVER 根據(jù)地圖經(jīng)緯度計算距離及其公式如下,需要的朋友可以參考下2013-08-08使用sqlserver官方驅(qū)動包調(diào)用存儲過程遇到的坑及解決方法
這篇文章主要介紹了用sqlserver官方驅(qū)動包調(diào)用存儲過程遇到的一個坑,解決方法大概就是換驅(qū)動包,在在存儲過程首行添加 set nocount on ,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10根據(jù)多條件查詢臨時表 想得到不同結(jié)果集的方法
很多情況下,需要采用多個參數(shù)來查詢一張臨時表,每個參數(shù)都要求得到不同的臨時表結(jié)果集。而往往某些參數(shù)并不對應(yīng)這張臨時表中的字段,而是對應(yīng)與該臨時表ID關(guān)聯(lián)的另一張表的字段。2009-11-11