0

我想在不执行代码的情况下了解这两件事。

有没有办法在不编写半编译器的情况下做到这一点?

在我发送它执行之前,我会将一个 sql 传递给一个进程或验证这些东西的东西......


@EDIT:评论问题的答案:

你想验证什么?

  • ANSI SQL 语法,并了解它们是否使用 DDL 语句。

这个是用户输入吗,如果是,他们是如何输入 SQL 语句的?

  • 他们编写了一个 *.sql 文件。我只是在不知道他们在哪里(在什么 IDE 中)编写它的情况下收到它,我必须验证 ANSI 语法(而不是语义)

这是来自代码吗?你是如何执行代码的?

  • 我不应该执行它。运营员工会这样做。需要的时候。如果您的意思是关于我正在寻找的 ANSISyntaxAndDDLCheckerSomething的代码,我会使用控制台应用程序运行它......可能使用.Net
4

1 回答 1

1

实际上,没有什么可以验证 SQL 的完整 SQL 分析器(例如在 DBMS 中找到的那些)。这是双重事实,因为根据 SQL 标准有效的内容不一定根据您的目标 DBMS 有效。SQL 标准的语法庞大而复杂。描述语言主要语法的BNF未规定允许的内容有很多限制。

语义检查也非常复杂。例如,如下语句:

SELECT * FROM SomeTable;

在语法上是正确的(您可以看到,我也可以看到),但是无法知道它是否会针对给定的数据库成功执行。这取决于SomeTable执行查询时数据库中是否存在调用的表。添加显式列名,并且您必须在执行查询时检查列名是否有效。您可能有一个语法有效的 CREATE TABLE 语句,该语句将无法执行,因为存在一个与已存在的表同名的视图。

如果您准备一个语句而不执行它,您会对该语句进行语法和语义检查。这可能是找出您所追求的最可靠的方法。

于 2012-12-19T16:38:21.973 回答