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

SQL Server 進階實戰(二):資料型別完整對照與 DDL 修改表結構指令

     編輯:關於SqlServer

建表範例回顧

CREATE TABLE yg1 (
    姓名 VARCHAR(8),
    性別 CHAR(2),
    年齡 INT,
    籍貫 VARCHAR(5),
    電話 VARCHAR(11),
    工資 MONEY,
    婚否 BIT
);

SQL Server 資料型別完整分類表

1. 數值型

型別範圍位元組用途
BIGINT-2^63 ~ 2^63-18極大整數 (身分證號、大數量計數)
INT-2^31 ~ 2^31-14標準整數 (主鍵、數量、狀態碼)
SMALLINT-2^15 ~ 2^15-12小整數 (年齡、排序、小範圍代碼)
TINYINT0 ~ 2551極小非負整數 (布林替代、極小枚舉)
BIT0, 1, NULL1 (位元壓縮)邏輯真/假 (已婚、啟用、刪除標記)
DECIMAL / NUMERIC(p,s)-10^38+1 ~ 10^38-15-17精確定點數 (金額、匯率、比率) **首選**
MONEY / SMALLMONEY-922,337... ~ 922,337...8 / 4貨幣專用 (含符號顯示),精度固定 4 位小數
FLOAT(n) / REAL-1.79E+308 ~ 1.79E+3084/8近似數值 (科學計算、經緯度),**不可用於金融計算**

2. 日期時間型

型別範圍精度位元組備註
DATETIME1753-01-01 ~ 9999-12-313.33 毫秒8舊版通用,精度較低
SMALLDATETIME1900-01-01 ~ 2079-06-061 分鐘4已棄用建議
DATE0001-01-01 ~ 9999-12-311 天3SQL 2008+,僅日期
TIME(n)00:00:00 ~ 23:59:59.9999999100 奈秒3-5SQL 2008+,僅時間
DATETIME2(n)0001-01-01 ~ 9999-12-31100 奈秒6-8SQL 2008+,**推薦替代 DATETIME**
DATETIMEOFFSET(n)含時區位移100 奈秒8-10SQL 2008+,跨時區應用必備

3. 字串型

型別長度儲存特性適用場景
CHAR(n)固定 1-8000不足補空格,定長固定長度代碼 (身分證、國碼、MD5)
VARCHAR(n)可變 1-8000實際長度+2位元組開銷一般文字、描述、名稱
VARCHAR(MAX)可變 0-2^31-1大值型別 (LOB),行外儲存長文本、JSON、XML、日誌
NCHAR(n)固定 1-4000Unicode 雙位元組固定長度多語系
NVARCHAR(n)可變 1-4000Unicode 雙位元組**多語系文字首選**
NVARCHAR(MAX)可變 0-2^30-1Unicode LOB長多語系文本
TEXT / NTEXT / IMAGE已棄用LOB 舊型別**勿用新開發**,改用 *VARCHAR(MAX)/NVARCHAR(MAX)/VARBINARY(MAX)

4. 二進位型

  • `BINARY(n)` 固定、`VARBINARY(n)` 可變、`VARBINARY(MAX)` 大物件。用於檔案流、圖片、加密資料、雜湊值。

5. 特殊型別

  • `UNIQUEIDENTIFIER` (GUID) 16 位元組,`NEWID()`/`NEWSEQUENTIALID()` 產生。
  • `XML` 型別 (SQL 2005+),支援 Schema 集合、索引、XQuery。
  • `HIERARCHYID` (SQL 2008+),階層結構編碼 (組織架構、目錄樹)。
  • `GEOMETRY` / `GEOGRAPHY` (SQL 2008+),空間資料 (GIS)。
  • `TABLE` 型別,預存程序/函數參數傳遞表值參數 (TVP)。

DDL 修改表結構核心指令

-- 1. 新增欄位
ALTER TABLE yg ADD 郵編 CHAR(6);  -- 必須指定型別

-- 2. 刪除欄位
ALTER TABLE yg DROP COLUMN 年齡;

-- 3. 修改欄位屬性 (型別、長度、NULL/NOT NULL、DEFAULT)
ALTER TABLE yg ALTER COLUMN 性別 CHAR(10);

-- 4. 重新命名欄位 (系統預存程序)
EXEC sp_rename 'yg.年齡', 'age', 'COLUMN';

-- 5. 重新命名表
EXEC sp_rename 'yg', 'newyg';  -- 物件類型預設 OBJECT

-- 6. 刪除表
DROP TABLE yg;
DROP TABLE yg, yg1, yg2;  -- 多表同時刪除

實戰避坑指南

  1. ALTER COLUMN 型別變更:縮小長度/精度前確認現有資料不截斷;`INT → SMALLINT` 需確認值在範圍內。
  2. 2. 加 NOT NULL:現有 NULL 值列必須先 `UPDATE ... SET col=預設值 WHERE col IS NULL`,或加 `DEFAULT` 約束再 `ALTER COLUMN ... NOT NULL`。 3. sp_rename 限制:僅改名稱,**不改變物件 ID、權限、相依物件 (視圖/SP 需手動刷新)**。 4. 大表 DDL:`ALTER TABLE` 可能鎖表長時間。SQL Server 2016+ 支援 `ONLINE=ON` (Enterprise) 或 `RESUMABLE=ON` 可恢復線上操作。 5. 型別選型原則:能用 INT 別用 BIGINT,能用 DECIMAL 別用 FLOAT,能用 VARCHAR 別用 CHAR,多語系必用 NVARCHAR,金額必用 DECIMAL/MONEY,新專案用 DATETIME2。

小結

精通資料型別特性與 DDL 修改指令,是資料庫設計與演進的基本功。**型別選對,效能、空間、正確性三贏**;DDL 操作謹慎規劃、備份先行、驗證後行。

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