SCHEMABINDING是SQL Server資料庫系統中的視圖選項,通過建立視圖與基表的結構綁定關係,阻止對基表進行可能導致視圖定義失效的修改操作(如刪除被引用列或修改列數據類型)。該選項要求視圖定義必須使用兩部分命名法(schema.object)引用對象,且所有被引用對象必須位於同一資料庫。在索引視圖、跨伺服器查詢最佳化和行級安全性等場景中,SCHEMABINDING可確保資料庫對象間的依賴關係穩定,避免因基表結構變更引發的視圖失效或性能問題。自SQL Server 2008版本以來持續支持該功能,並適用於Azure SQL Database等雲平台。
基本介紹
- 所屬平台:SQL Server
- 引入版本:SQL Server 2008起
- 適用對象:視圖/安全策略
- 綁定機制:阻止基表結構變更
- 語法要求:兩部分命名規範
- 關鍵限制:不得嵌套架構修改
功能作用
- 當創建視圖時使用WITH SCHEMABINDING子句後,任何ALTER TABLE修改操作都將被系統驗證:
- 若修改操作涉及被視圖引用的列(如刪除列或修改列數據類型),資料庫引擎將拋出錯誤並阻止操作執行
- 允許修改未被視圖引用的表結構,例如添加新列或調整未被引用的列約束
- 消除跨連結伺服器查詢時固定基數估計值的問題,使查詢最佳化器使用實際統計信息生成執行計畫
- 強制維護視圖與基表的綁定關係,確保分散式查詢結果的一致性
使用要求
- 視圖定義必須滿足以下語法規範:
- 所有被引用對象使用兩部分命名法(schema.object)
- SELECT語句不得包含*通配符,必須顯式列名
- 用戶定義函式需通過SCHEMABINDING創建方可被引用
- 禁止直接刪除參與架構綁定的表或視圖,需先解除綁定關係
- 基表與視圖必須具有相同的架構所有者且必須使用兩部分名稱(schema.object)引用所有對象
套用場景
- 創建索引視圖時必須啟用SCHEMABINDING選項,確保基表結構穩定:
- 防止索引視圖因基表結構變更而失效,例如禁用列刪除操作
- 要求分區視圖的分區列位於相同序號位置,且CHECK約束範圍不重疊
- 安全策略啟用SCHEMABINDING時可繞過許可權檢查:
- 允許直接訪問被綁定的安全策略對象,無需顯式授予SELECT許可權
- 阻止修改被安全策略謂詞引用的列,但允許調整非引用列屬性
- 自SQL Server Management Studio 20.1版本起:
- 支持在CREATE TRIGGER語法中使用SCHEMABINDING選項
兼容性說明
- 版本支持範圍:
- SQL Server 2008及後續版本(含Azure SQL Database)均支持該選項
- 在SQL Server 2016及以上版本中,與記憶體最佳化表結合使用時需注意綁定限制
- 創建時必須啟用特定SET選項(如ARITHABORT)
- 使用ARITHABORT選項時建議設定為ON狀態
