是否有一个应用程序可以解析一组给定的存储过程(SQL Server 2000)并获取其中正在使用的所有表和相关列。存储过程可以有来自不同数据库的表。
输出应该类似于 TableA columnA columnC columnD
表B列E列F列G
我用Database Edition GDR写了一个小应用,有兴趣的可以参考http://tsqlparsergdr.codeplex.com
是否有一个应用程序可以解析一组给定的存储过程(SQL Server 2000)并获取其中正在使用的所有表和相关列。存储过程可以有来自不同数据库的表。
输出应该类似于 TableA columnA columnC columnD
表B列E列F列G
我用Database Edition GDR写了一个小应用,有兴趣的可以参考http://tsqlparsergdr.codeplex.com
不是一个具体的解决方案——而是一个思路。
将 sysdepends 视为一种潜在的解决方案 - 但众所周知,它在包含所有依赖对象信息方面不可靠。
但是 Lex/Yacc 派生的东西怎么样?有一些商业解析器,例如
没有寻找开源实现,但我想我会寻找那条路线。以下是我开始搜索的方式:
ANSI SQL 的 BNF 语法可以在这里找到:
通过选择 lex 实现,这似乎是一个相对简单的工程问题。(虽然如果你想支持 MS SQL 扩展,会有些繁重的工作)
您可以使用SHOWPLAN_ALL设置并解析输出。
决定使用 Regex 创建一个小型应用程序来满足我当前的需求。
谢谢大家的回复。
sp_depends 非常适合我。它显示了我的更改可能会影响哪些表或 SP
sp_depends 应该有帮助
您可以以编程方式(在开发环境中)调用存储过程并获取结果列。也许您有一个命名约定以避免调用插入和更新过程。您也必须找到设置正确参数的方法。
注意:我认为 100% 可靠的解决方案在技术上是不可能的,因为存储过程(可以)的工作方式。
看这个例子:
[...]
@MyDate datetime
AS
IF (day(@MyDate) = 1)
BEGIN
SELECT * FROM MyFirstTable
RETURN
END
IF (@MyDate > getdate())
SELECT MyID, MyText FROM MySecondTable WHERE ADate > @MyDate
ELSE
EXEC Other_StoredProcedure @MyType, @MyDate
所以有两个问题:结果列可能不同,您必须递归地遵循其他存储过程。