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

SQL Server 腳本產生工具常見 Bug 分析(一):View/Function 建立順序錯誤實測與代碼對比

     編輯:關於SqlServer

核心問題:依「優先順序」而非相依關係產生腳本

Enterprise Manager 認定 View 優先級高於 Function,忽略 sysdepends 實際相依鏈。測試案例:

相依關係鏈

fnT1 ← vwT1 ← fnT2(vwT1 參考 fnT1,fnT2 參考 vwT1)

原始建立腳本(正確順序)

CREATE FUNCTION fnT1() RETURNS INT AS BEGIN RETURN 123 END GO
CREATE VIEW vwT1 AS SELECT aa=dbo.fnT1() GO
CREATE FUNCTION fnT2() RETURNS TABLE AS RETURN (SELECT * FROM vwT1) GO

EM 產生腳本(錯誤順序)

-- 1. 先 DROP 三個物件
-- 2. 建立順序:vwT1 → fnT1 → fnT2 (錯誤!)
CREATE VIEW vwT1 AS SELECT aa=dbo.fnT1() GO
-- 此時 fnT1 尚不存在!
CREATE FUNCTION fnT1() ... GO
CREATE FUNCTION fnT2() ... GO

執行結果

Server: Msg 208, Level 16, State 1, Procedure vwT1, Line 4
Invalid object name 'dbo.fnT1'.

結論

一眼可見:建立 View 比 Function 早,違反相依關係。此為 EM 腳本產生工具嚴重缺陷,導致產生腳本無法直接執行,需手動調整順序。

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