首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 特殊數據類型速查:timestamp、bit、uniqueidentifier、sql_variant、table

     編輯:MySQL 資料庫相關知識

五大特殊類型一覽

類型別名/標準名存儲核心語義典型用途
timestamprowversion8 字節全局單調遞增版本號,與時間無關樂觀鎖、緩存驗證、數據同步檢查點
bit-1 位 (存儲 1 字節)布爾值:0/1/NULL標誌位、啟用狀態、是/否調查
uniqueidentifier-16 字節全局唯一標識符 (GUID/UUID)分布式主鍵、合併複製、外部系統關聯
sql_variant-值大小 + 元數據單列存儲多種基礎類型EAV 模型、動態屬性、配置值存儲
table-內存/TempDB 頁臨時結果集、表值參數批量傳遞、函數返回、變量表

關鍵特性速記

timestamp / rowversion

  • 每次 INSERT/UPDATE/DELETE 修改行時自動賦值 @@DBTS 並遞增。
  • 不可作主鍵/聚簇索引/外鍵(值會變)。
  • SELECT @@DBTS 獲取當前數據庫版本計數器。
  • 2005+ 推薦用 rowversion 別名(ANSI 標準)。

bit

  • 字面量無需引號:WHERE Flag = 1。
  • 聚合 SUM(bit_col) 可統計 TRUE 數量。
  • 索引選擇性極低(僅 0/1),單列索引幾乎無效,需組合索引。

uniqueidentifier

  • 生成函數:NEWID() (隨機)、NEWSEQUENTIALID() (有序、僅默認約束)。
  • 隨機 GUID 導致聚簇索引碎片嚴重,聚簇索引慎用,非聚簇索引配合 NEWSEQUENTIALID() 或應用層有序生成 (COMB GUID)。
  • 字符串表示 36 字符,存儲/傳輸開銷大,必要時才用。

sql_variant

  • 元數據函數:SQL_VARIANT_PROPERTY(val, 'BaseType'/'Precision'/'Scale'/'MaxLength'/'Collation')。
  • 不支持 text/ntext/image/timestamp/sql_variant 基礎類型。
  • 比較規則:先按類型優先級排序,再按值排序(不同類型間比較結果可能違反直覺)。

table

  • 變量聲明:DECLARE @T TABLE (Id INT PRIMARY KEY, Name NVARCHAR(50));。
  • 表值參數:CREATE TYPE T AS TABLE(...); CREATE PROC P @T T READONLY;。
  • 函數返回:CREATE FUNCTION F() RETURNS @T TABLE ...。
  • 限制:READONLY、無統計信息、不支持 DDL/游標 (除 READ_ONLY)。

用戶定義類型 (UDT) 兩種形態

形態實現能力適用場景
T-SQL 別名類型sp_addtype / CREATE TYPE ... FROM base_type命名語義、默認值、綁定規則/默認/CHECK業務代碼規範(身份證、手機、產品編碼)
CLR UDT.NET 結構體 + SqlUserDefinedTypeAttribute方法、運算符、序列化、索引支持、強類型複雜值對象(幾何點、貨幣、物理量、標識符)

選型口訣

版本控制用 rowversion,布爾標誌用 bit 存;
分布式鍵用 uniqueidentifier,動態屬性 sql_variant;
批量參數傳 table 類型,業務語義定 UDT 專。

特殊類型解決標準類型覆蓋不到的 5% 場景,但也帶來額外複雜性。**架構評審時,每個特殊類型列都要有「業務必要性 + 替代方案對比 + 客戶端映射驗證」三項簽署**,防止濫用成為技術債。

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