在過去的6個月中,我一直在努力編寫一個動態映射業務邏輯執行路徑的過程。SQL存儲過程解析
以前我沿着查看sys.sql_dependencies表的路線去找出執行流程,但是在程序中我們有條件邏輯來決定是否有一些程序被調用。
我這樣做,到目前爲止主要機制是輸出的程序規範到一個臨時表和輸出任何EXEC或IF邏輯內
DECLARE @TRAVERSAL_DEFINITION TABLE
(
ROW_ID INT IDENTITY (1,1),
SP_TEXT VARCHAR(MAX)
)
INSERT INTO @TRAVERSAL_DEFINITION
(SP_TEXT)
exec sp_helptext '[SCHEMA].[PROCEDURE]'
SELECT TD_1.ROW_ID,
LTRIM(TD_1.SP_TEXT),
CASE WHEN LTRIM(SP_TEXT) LIKE 'IF%' THEN 1 ELSE 0 END,
CASE WHEN LTRIM(SP_TEXT) LIKE 'EXEC%' THEN 1 ELSE 0 END,
IF_START.ROW_ID,
IF_END.ROW_ID
FROM @TRAVERSAL_DEFINITION TD_1
CROSS APPLY (SELECT MIN(ROW_ID) AS ROW_ID
FROM @TRAVERSAL_DEFINITION TD_2 WHERE LTRIM(SP_TEXT) LIKE 'END%'
AND TD_2.ROW_ID > TD_1.ROW_ID) IF_END
CROSS APPLY (SELECT MIN(ROW_ID) AS ROW_ID
FROM @TRAVERSAL_DEFINITION TD_2
WHERE LTRIM(SP_TEXT) LIKE 'BEGIN%'
AND TD_2.ROW_ID > TD_1.ROW_ID) IF_START
WHERE (LTRIM(SP_TEXT) LIKE 'IF%' OR LTRIM(SP_TEXT) LIKE 'EXEC%')
ORDER BY TD_1.ROW_ID
有沒有人,如果過這個特殊的問題來了那麼你採取了什麼方法/解決方案?
謝謝。
不幸的是,由於我們的DBA團隊施加了限制,我們沒有權限創建我們開發數據庫的DacPac。 – Dataoverride
大聲笑退出並去其他地方工作。 –
如果生活只是那麼容易;-) – Dataoverride