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

SQL Server 2008 ALTER TABLE 修改欄位正確語法:ALTER COLUMN 而非 MODIFY

     編輯:關於SqlServer

錯誤嘗試

-- 錯誤 1: Oracle/MySQL 風格
ALTER TABLE Course MODIFY COLUMN cname CHAR(20);
-- 訊息:'MODIFY' 附近有語法錯誤

-- 錯誤 2: 省略 COLUMN 關鍵字
ALTER TABLE Course MODIFY cname CHAR(20);
-- 訊息:'MODIFY' 附近有語法錯誤

正確語法

-- SQL Server / ANSI SQL 標準
ALTER TABLE Course ALTER COLUMN cname CHAR(20);

完整 ALTER COLUMN 語法

ALTER TABLE table_name
ALTER COLUMN column_name 
    new_data_type [ ( precision [ , scale ] ) ]
    [ NULL | NOT NULL ]
    [ COLLATE collation_name ]

常見修改場景範例

需求T-SQL 範例注意事項
擴大字串長度ALTER TABLE T ALTER COLUMN C VARCHAR(100)安全,無資料截斷風險
縮減字串長度ALTER TABLE T ALTER COLUMN C VARCHAR(20)需確認現有資料長度 ≤ 20,否則截斷
變更數值精度ALTER TABLE T ALTER COLUMN C DECIMAL(18,4)精度縮減可能失去小數位
NOT NULL → NULLALTER TABLE T ALTER COLUMN C INT NULL安全
NULL → NOT NULLALTER TABLE T ALTER COLUMN C INT NOT NULL需確認無 NULL 值,否則失敗
加入 COLLATEALTER TABLE T ALTER COLUMN C NVARCHAR(50) COLLATE Chinese_PRC_CS_AS影響排序/比較,需重建索引

跨資料庫語法差異備忘

資料庫修改欄位關鍵字
SQL ServerALTER COLUMN
OracleMODIFY
MySQLMODIFY COLUMN / CHANGE COLUMN
PostgreSQLALTER COLUMN ... TYPE
DB2ALTER COLUMN ... SET DATA TYPE

限制與替代方案

  • 無法直接變更 Identity:需 Drop Column → Add Identity (參考文章 19987)
  • 無法直接變更 PK/UK/FK 欄位型別:需先移除約束
  • 大表 ALTER COLUMN 會鎖表:企業版可用 ONLINE = ON (部分操作)
  • 計算欄位、Timestamp、Rowversion:不可 ALTER
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved