原始資料表schema
CREATE TABLE [dbo].[tbl]
(
[col1] [nvarchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL,
[col2] [nvarchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL
) ON [PRIMARY]
我們針對上述的資料表tbl新增欄位col3,分別以SSMS和T-SQL操作並以SQL Server Profiler錄製以了解背後運作過程
SSMS操作畫面
SSMS錄製結果
CREATE TABLE dbo.Tmp_tbl
(
col1 nvarchar(50) NOT NULL,
col2 nvarchar(50) NOT NULL,
col3 nvarchar(50) NOT NULL
) ON [PRIMARY]
IF EXISTS(SELECT * FROM dbo.tbl)
EXEC('INSERT INTO dbo.Tmp_tbl (col1, col2)
SELECT col1, col2 FROM dbo.tbl WITH (HOLDLOCK TABLOCKX)')
DROP TABLE dbo.tbl
EXECUTE sp_rename N'dbo.Tmp_tbl', N'tbl', 'OBJECT'
T-SQL操作畫面
T-SQL錄製結果
alter table tbl
add col3 nvarchar(50) not null
由上面的結果我們可以發現利用SSMS新增欄位時會執行四個步驟
1.建立以Tmp_開頭的資料表
2.將原本的資料表資料寫入Tmp_資料表
3.drop原本資料表
4.將Tmp_資料表改名
如果要新增欄位的資料表本身含有大量資料,此時就不適合利用SSMS應該改以直接下達T-SQL以減輕系統負載,另外變更資料表欄位類型也跟新增欄位執行相同的步驟。
沒有留言:
張貼留言