利用Select Into複製資料表時,透過Isnull函數將欄位變更為不允許Null

利用Select Into複製資料表時,透過Isnull函數將欄位變更為不允許Null

我們常常有複製資料表的需求,而最不耗資源的方式就是

用Select Into方式來複製資料表。

 

今天資料庫中某張有近百萬筆且不斷有Query的資料表需要

異動Schema,很棘手的是要重設PK,而新PK中有兩個欄位

屬性不是Not Null,因此屬性也要重設。

 

由於是很忙碌的一張表,因此影響交易的時間當然是越短越

好。所以複製成另一張新資料表後,修改完Schema再Rename

資料表名稱應該可以降低影響交易的時間。

 

剛剛有提到資料表中有兩個欄位型態須由允許Null改為不允許

Null。一般我們會利用

Alter Table [TableName] Alter Column [ColumnName] Not Null

來改,但如果能更省時的在複製資料表時就將型態改好那不是

更快。這時Isunll函數就派上用場了,語法如下:

 

--建立來源資料表
Create Table NullTable(Id Int,Name NvarChar(10));
GO

--寫入一筆紀錄
Insert Into NullTable Values(1,'Rock');
GO

--檢視欄位型態
SELECT [name], [is_nullable]
FROM sys.columns 
WHERE [object_id] = OBJECT_ID(N'NullTable');
GO

--利用Select Into搭配Isnull函數複製資料表
Select Isnull(Id,0) As ID,Isnull(Name,'') As Name
Into NotNullTable From NullTable;
GO

--檢視欄位型態
SELECT [name], [is_nullable] 
FROM sys.columns 
WHERE [object_id] = OBJECT_ID(N'NullTable');
GO

 


nullable




 

如上圖所示,我們成功複製一張資料表名為NotNullTable,且欄位Id及欄位Name

在Select Into過程中就被改為不允許Null了。

 

 

 

我是ROCK

rockchang@mails.fju.edu.tw