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

SQL Server 腳本產生工具常見 Bug 分析(二):建立順序錯誤、中文註釋與預存程序相依性問題

     編輯:關於SqlServer

Bug 1:未依 sysdepends 相依關係產生建立順序

Enterprise Manager 依「優先順序」而非相依關係產生腳本。例如認為 View 優先級高於 Function,導致相依鏈 fnT1 ← vwT1 ← fnT2 產生錯誤順序:

-- 產生順序:vwT1 → fnT1 → fnT2 (錯誤!)
-- 正確順序應為:fnT1 → vwT1 → fnT2

執行時產生嚴重錯誤:

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

Server: Msg 208, Level 16, State 1, Procedure fnT2, Line 5
Invalid object name 'vwT1'.

Bug 2:中文「--」註釋符號問題

操作腳本產生時對中文雙減號註釋處理有誤,英文版推測無此問題,需實測驗證。

Bug 3:預存程序相依性遺漏

當 SP (如 spGetIDStr) 未參考任何資料表/檢視表,但被另一 SP (spAnalyseStrList) 參考時,無法在 sysdepends 建立相依關係。產生腳本時總報告:

spGetIDStr does not exist, cannot create dependency in sysdepends,
stored procedure spAnalyseStrList created anyway.

手動調整順序亦無效,產生腳本必有誤。

驗證範例:無資料表相依的 SP 相依鏈

-- 建立順序:spB1 → spA1 (spA1 參考 spB1)
CREATE PROC spB1 AS RETURN 11 GO
CREATE PROC spA1 AS BEGIN DECLARE @i INT EXEC @i=spB1 RETURN @i*2 END GO

-- 產生腳本卻變成:spA1 → spB1 (按字母順序!)
-- 幸好兩者皆能建立,但邏輯順序錯誤

命名 spA1/spB1 即為測試字母排序影響。建議測試 SP 與 Function、SP 群組等組合情境。

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