SCHEMABINDING

SCHEMABINDING是SQL Server資料庫系統中的視圖選項,通過建立視圖與基表的結構綁定關係,阻止對基表進行可能導致視圖定義失效的修改操作(如刪除被引用列或修改列數據類型)。該選項要求視圖定義必須使用兩部分命名法(schema.object)引用對象,且所有被引用對象必須位於同一資料庫。在索引視圖、跨伺服器查詢最佳化和行級安全性等場景中,SCHEMABINDING可確保資料庫對象間的依賴關係穩定,避免因基表結構變更引發的視圖失效或性能問題。自SQL Server 2008版本以來持續支持該功能,並適用於Azure SQL Database等雲平台。

基本介紹

  • 所屬平台:SQL Server  
  • 引入版本:SQL Server 2008起 
  • 適用對象:視圖/安全策略  
  • 綁定機制:阻止基表結構變更  
  • 語法要求:兩部分命名規範  
  • 關鍵限制:不得嵌套架構修改  
功能作用,使用要求,套用場景,兼容性說明,

功能作用

  • 當創建視圖時使用WITH SCHEMABINDING子句後,任何ALTER TABLE修改操作都將被系統驗證:
  • 若修改操作涉及被視圖引用的列(如刪除列或修改列數據類型),資料庫引擎將拋出錯誤並阻止操作執行
  • 允許修改未被視圖引用的表結構,例如添加新列或調整未被引用的列約束
在跨伺服器查詢場景中,通過SCHEMABINDING創建的索引視圖可最佳化查詢性能:
  • 消除跨連結伺服器查詢時固定基數估計值的問題,使查詢最佳化器使用實際統計信息生成執行計畫
  • 強制維護視圖與基表的綁定關係,確保分散式查詢結果的一致性

使用要求

  • 視圖定義必須滿足以下語法規範:
  • 所有被引用對象使用兩部分命名法(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狀態

相關詞條

熱門詞條

聯絡我們