首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 線上修改資料庫結構:T-SQL 動態調整欄位、預設值與擴充屬性

     編輯:關於SqlServer

針對 SQL Server 2000 環境,示範如何在**不停機、保留現有資料**前提下,以 T-SQL 動態新增欄位、修改欄位長度、維護預設約束與擴充屬性(MS_Description)。

情境:HR_User 表新增 NickName、Birthday 欄位

原結構:UserId INT PK, UserName VARCHAR(50) NOT NULL

1. 新增欄位並同步建立預設約束

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 子句即可一次完成欄位新增與預設值設定。

2. 同步建立擴充屬性(欄位描述)

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「資料行屬性 → 描述」欄位,文件化資料字典。

情境:修改 UserName、NickName 長度 50 → 100

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

注意:

  • 修改長度需指定完整資料型別、定序、NULL/NOT NULL 屬性。
  • 若欄位有索引/約束相依,需先移除再修改再重建。
  • 縮短長度需確保現有資料不截斷。

關鍵系統程序對照

操作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 ...

遷移腳本產生建議

  1. 開發環境完成結構變更。
  2. 使用 SSMS/Enterprise Manager 產生**完整建立腳本**(含索引、約束、擴充屬性)。
  3. 人工提取 ALTER TABLE ADD/ALTER COLUMN 與 sp_addextendedproperty 片段。
  4. 在測試環境驗證腳本執行無誤、資料完整。
  5. 生產環境維護視窗執行,並備妥回滾腳本。

現代版本補充

SQL Server 2005+ 支援 ALTER TABLE ... ADD col type DEFAULT val 語法更簡潔;sys.extended_properties 取代舊程序查詢描述。但核心 ALTER TABLE 邏輯相通。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved