【发布时间】:2010-04-07 12:01:33
【问题描述】:
我正在尝试使用 .Net 从数据库中获取一些与存储过程(或函数)相关的数据。 我需要做的第一件事是从数据库中获取存储的过程并将其转换为字符串格式。 我需要的信息是:返回的列集、SP 中使用的表、从 SP 调用的存储过程。目前我能想到的唯一方法是解析文本并查找关键字匹配。有更好的方法吗?
有什么想法吗?
【问题讨论】:
我正在尝试使用 .Net 从数据库中获取一些与存储过程(或函数)相关的数据。 我需要做的第一件事是从数据库中获取存储的过程并将其转换为字符串格式。 我需要的信息是:返回的列集、SP 中使用的表、从 SP 调用的存储过程。目前我能想到的唯一方法是解析文本并查找关键字匹配。有更好的方法吗?
有什么想法吗?
【问题讨论】:
假设您知道返回的表可能取决于函数的输入,因此给定的存储过程不会总是有一个输出,但是...
要获取存储过程的列表,您可以调用sp_help。然后,您可以使用sp_helptext(@objname 是存储过程的名称)获取存储过程的来源。
要查找引用的表、列等,您可能需要解析 SQL 脚本 - 您可以自己执行此操作,或者有更多已建立的项目(例如 ANTLR)可以为您简化问题。
【讨论】:
将 SPROC 作为文本后,您可以使用 SQL 解析器。
.NET 有几个 - 请参阅this SO 问题的答案(Parsing SQL in .NET)。
【讨论】:
如果你使用的是 SQL Server,你也可以试试 sp_depends 存储过程
EXEC sp_depends @objname = N'sproc_name' ;
【讨论】: