0

コードを実行せずに両方のことを知りたいです。

半分のコンパイラをコーディングせずにこれを行う方法はありますか?

実行するために送信する前に、このようなものを検証するプロセスまたは何かにSQLを渡します...


@EDIT : コメントの質問への回答:

何を検証しようとしていますか?

  • ANSI SQL 構文、および DDL 文を使用しているかどうかを知る。

これはユーザー入力ですか? もしそうなら、彼らはどのように SQL ステートメントを入力していますか?

  • *.sql ファイルを書き込みます。彼らがどこで(どのIDEで)それを書いたのかを知らずに受け取っただけで、ANSI構文(セマンティクスではなく)を検証する必要があります

これはコードからですか?どのようにコードを実行していますか?

  • 私はそれを実行する必要はありません。オペレーションの従業員がそれを行います。必要なとき。私が探している ANSISyntaxAndDDLCheckerSomething に関するコードを意味する場合は、コンソール アプリで実行します...おそらく with.Net
4

1 に答える 1

1

現実的には、SQL を検証できる完全な SQL アナライザー (DBMS 内にあるものなど) に勝るものはありません。これは二重に当てはまります。SQL 標準に従って有効なものが、ターゲット DBMS によっては必ずしも有効であるとは限らないからです。SQL 標準の文法は大きくて複雑です。言語の主な構文を説明するBNFによって規定されていない、許可されるものには多くの制約があります。

セマンティック チェックも非常に複雑です。たとえば、次のようなステートメントです。

SELECT * FROM SomeTable;

は構文的には正しいですが (あなたもそうですし、私もそうです)、特定のデータベースに対して正常に実行されるかどうかを知る方法はありません。SomeTableクエリが実行された時点でデータベースに呼び出されたテーブルがあるかどうかによって異なります。明示的な列名を追加すると、クエリの実行時にも列名が有効であることを確認する必要があります。既に存在するテーブルと同じ名前のビューがあるため、実行に失敗する構文的に有効な CREATE TABLE ステートメントを持つことができます。

ステートメントを実行せずに準備すると、ステートメントの構文とセマンティックのチェックが行われます。それはおそらく、あなたが求めているものを見つけるための最も信頼できる方法です.

于 2012-12-19T16:38:21.973 に答える