0

Vb.netでアプリケーションを作成しようとしています。その点で、ユーザーは入力として複数のテーブルを使用してクエリを実行します。レコードが返されない場合、私のプログラムはそのクエリを分析し、クエリで指定された条件でレコードが欠落しているテーブルを特定する必要があります。

例えば:

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

表2では、レコードが存在し、表1では欠落している可能性があります。これは、私のプログラムがtable1にレコードが存在しないことをユーザーに通知する必要があることを意味します。

ユーザーは動的にクエリを実行します。私のプログラムはそれを分析する必要があります。 この機能でアプリケーションを作成することは可能ですか?

まず、クエリを分離する必要があります。tatの場合、指定されたクエリに存在し、各テーブルに関連付けられたwhere句を取得する必要があります。

4

1 に答える 1

0

それが可能だ。しかし、それを正しく行い、堅牢にすることは、おそらく大変な作業になるでしょう。

ユーザーが SQL クエリをコーディングする方法に制限はありますか? そうでない場合は、(ユーザーによっては)CTE、サブクエリなどを含む、任意の複雑さのクエリを分析する準備をする必要があります。

しかし、本当にこれを試してみたい場合は、まずここでFROM 句の構文図を見てください。これは、FROM 句が取り得るすべての形式を示しています。

プログラムは、構文図のどの「分岐」が有効であるかを判断し、それに基づいて、節内のどの単語がテーブル名を示しているかを判断できる必要があります。WHERE 句のどの単語がそのテーブルのフィールドを参照しているかを判断できるようにする必要があります。

そのためには、最初にトークナイザー (SQL ステートメントから単語や記号を抽出できるようにするため) が必要です。次に、ほとんどの場合、有限状態機械ベースのパーサーが必要です。

私が言ったように、これは大変な作業になるでしょう。

于 2013-02-01T17:14:10.360 に答える