我正在尝试在C#中以编程方式进行一些SQL查询验证(不调用实际的数据库)。本质上,我希望用户能够输入视图,UDF或SP并立即验证其依赖项。用户可以将这些输入到用于定义数据库对象的自定义工具中。
因此,如果用户输入:
CREATE VIEW someView AS SELECT name, address FROM users
我可以提取“用户”的依赖关系,然后检查存储在内存中的数据库对象集合(例如,表,视图等),以确保其中一个存在依赖关系。请记住,输入到我的自定义应用程序中的实际视图/ UDF / SP非常复杂,并且我自己解析它们是不可取的。
我目前正在尝试使用Microsoft.Data.Schema.ScriptDom.Sql.TSql100Parser执行此操作。这提供了一个parse方法,它返回查询的DOM表示。但是,这是一个非常复杂的DOM,我基本上只需为它编写一个完整的解析器。
任何想法/建议?谢谢!
答案 0 :(得分:2)
有一个proc可以使用名为sp_depends ...但由于延迟名称解析,它不是故障安全的。真的没有安全的方法可以做到这一点,它在最新版本中有所改善,但仍然是颈部疼痛