在过去的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