0

我正在尝试在 Vb.net 中创建一个应用程序;因为用户将给出一个带有多个表的查询作为输入。如果没有返回记录,我的程序必须分析该查询并针对查询中给出的条件查明在哪个表中缺少记录。

例如:

SELECT table1.column1, table2.column2 
FROM table1
   , table2 
WHERE table1.column1 = table2.column3
   and table2.column2 = Y; 

在表 2 中,记录可能存在,而表 1 可能丢失。这意味着我的程序必须通知用户 table1 中的记录不存在。

用户将动态查询,我的程序必须对其进行分析。 是否可以创建具有此功能的应用程序?

首先,我需要分离查询,为此我需要获取给定查询中存在的表名,并将 where 子句关联到每个表

4

1 回答 1

0

这是可能的。但是做对了,让它变得健壮,可能需要做很多工作。

对用户如何编写 sql 查询有任何限制吗?如果没有,您将不得不准备分析任意复杂的查询,包括(取决于您的用户)CTE、子查询等。

但是如果你真的想试试这个,首先看一下 FROM 子句的语法图,这里. 这向您展示了 FROM 子句可以采用的所有形式。

您的程序将必须能够确定语法图的哪个“分支”有效,并在此基础上确定子句中的哪个单词表示表名。它必须这样做,以便它可以判断 WHERE 子句中的哪些词引用了该表中的字段。

为此,您首先需要一个标记器(能够从 SQL 语句中提取单词和符号),然后很可能需要一个基于有限状态机的解析器。

就像我说的,这将是很多工作。

于 2013-02-01T17:14:10.360 回答