利用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
如上圖所示,我們成功複製一張資料表名為NotNullTable,且欄位Id及欄位Name
在Select Into過程中就被改為不允許Null了。
我是ROCK
rockchang@mails.fju.edu.tw