針對 SQL Server 2000 環境,示範如何在**不停機、保留現有資料**前提下,以 T-SQL 動態新增欄位、修改欄位長度、維護預設約束與擴充屬性(MS_Description)。
原結構:UserId INT PK, UserName VARCHAR(50) NOT NULL
ALTER TABLE [dbo].[HR_User] ADD
[NickName] [VARCHAR] (50) COLLATE Chinese_PRC_CS_AS NOT NULL DEFAULT (''),
[Birthday] [DATETIME] NOT NULL DEFAULT (GETDATE());
GO
直接從管理工具產生的建表腳本中複製欄位定義段,加上 DEFAULT 子句即可一次完成欄位新增與預設值設定。
EXEC sp_addextendedproperty
N'MS_Description', N'出生日期',
N'user', N'dbo', N'table', N'HR_User', N'column', N'Birthday';
GO
EXEC sp_addextendedproperty
N'MS_Description', N'用戶暱稱',
N'user', N'dbo', N'table', N'HR_User', N'column', N'NickName';
GO
對應 SSMS「資料行屬性 → 描述」欄位,文件化資料字典。
ALTER TABLE [HR_User] ALTER COLUMN [UserName] [VARCHAR] (100) COLLATE Chinese_PRC_CS_AS NOT NULL;
GO
ALTER TABLE [HR_User] ALTER COLUMN [NickName] [VARCHAR] (100) COLLATE Chinese_PRC_CS_AS NOT NULL;
GO
注意:
| 操作 | T-SQL / 程序 |
|---|---|
| 新增欄位 | ALTER TABLE ... ADD col type CONSTRAINT |
| 修改欄位 | ALTER TABLE ... ALTER COLUMN col new_type |
| 刪除欄位 | ALTER TABLE ... DROP COLUMN col |
| 新增/修改預設值 | ALTER TABLE ... ADD CONSTRAINT df_name DEFAULT val FOR col |
| 擴充屬性新增 | sp_addextendedproperty 'MS_Description', 'desc', 'user', 'schema', 'table', 'tbl', 'column', 'col' |
| 擴充屬性更新 | sp_updateextendedproperty ... |
| 擴充屬性刪除 | sp_dropextendedproperty ... |
ALTER TABLE ADD/ALTER COLUMN 與 sp_addextendedproperty 片段。SQL Server 2005+ 支援 ALTER TABLE ... ADD col type DEFAULT val 語法更簡潔;sys.extended_properties 取代舊程序查詢描述。但核心 ALTER TABLE 邏輯相通。