Sql-Server

如何查找計算列中是否引用了列?

  • September 5, 2019

我正在嘗試批量重新輸入列。這意味著首先刪除並重新創建它們所屬的任何約束。

我發現這些約束引用的列

  • 外鍵,
  • 主鍵,
  • 索引,
  • 檢查約束,
  • 規則,
  • 預設約束。

但我找不到計算列。

我調查過INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE,但它不包括計算列。

還有sys.computed_columns一個顯示定義,但不以可搜尋的方式列出列。

還有其他地方可以看嗎?如果 SQL Server 可以找出依賴關係,我想我也可以。

感謝 Scott Hodgin,我在sys.sql_expression_dependencies

SELECT 
   OBJECT_NAME(sed.referencing_id)     AS referencingTable
   , pc.[name] AS computedColumn
   , pc.is_computed
   , cc.[name] AS referencedcolumn
   , cc.is_computed
FROM sys.sql_expression_dependencies sed
JOIN sys.[columns] pc ON sed.referencing_minor_id = pc.column_id AND sed.referencing_id = pc.[object_id]
JOIN sys.[columns] cc ON sed.referenced_minor_id = cc.column_id AND sed.referenced_id = cc.[object_id]
WHERE sed.referencing_minor_id > 0      -- referencing object is Column
AND sed.referenced_minor_id > 0         -- referenced object is Column
AND sed.referencing_id = sed.referenced_id  -- references the same table

引用自:https://dba.stackexchange.com/questions/236660