是否有一个应用程序,它可以解析给定的一组存储过程(SQL Server 2000)并获取正在其中使用的所有表和关联列。 存储过程可以包含来自不同数据库的表。
输出应该是这样的 表A columnA columnC columnD
表B columnE columnF columnG
我使用数据库版GDR编写了一个小应用程序任何感兴趣的人都可以参考http://tsqlparsergdr.codeplex.com
答案 0 :(得分:2)
不是具体的解决方案 - 而是一种思路。
将sysdepends视为一种潜在的解决方案 - 但在包含所有依赖对象信息时,这是非常不可靠的。
但Lex / Yacc衍生出来的是什么?有一些商业解析器,例如
没有寻找开源实现,但我想我会寻找那条路线。以下是我开始搜索的方式:
ANSI SQL的BNF语法可以在这里找到:
选择lex实现,这似乎是一个相对直接的工程问题。 (如果你想支持MS SQL扩展,可以使用一些重载)
答案 1 :(得分:1)
您可以使用SHOWPLAN_ALL设置并解析输出。
答案 2 :(得分:1)
决定使用Regex创建一个小应用程序以满足我当前的需求。
谢谢大家的回复。
答案 3 :(得分:1)
sp_depends非常适合我。 它显示了我的更改可能会影响哪个表或SP
答案 4 :(得分:0)
sp_depends应该有帮助
答案 5 :(得分:-1)
您可以以编程方式调用存储过程(在开发环境中)和获取结果列。也许你有一个命名约定,以避免调用插入和更新过程。你必须找到设置正确参数的方法。
注意:我认为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
所以有两个问题:结果列可能不同,你必须按递归方式跟随其他存储过程。