実行前に完全な解析/コンパイルを行う技術でこれを行う一般的な方法は、問題のコードの前に実行を停止させるものを追加することです。たとえば、VBScriptのは、実際にそれを実行せずに構文チェックをパスかどうかを確認するために、私が先頭に追加:
Wscript.exit(1)
いずれかが存在する場合、私は構文エラーを参照するか、何も存在しないならば、最初のアクションが終了することである。この方法をスクリプトを実行し、残りのコードを無視します。
私はSQL世界でアナログは、重大度の高いエラーを発生させることだと思います。重大度20+を使用すると接続が切断されるため、スクリプトに複数のバッチがある場合はすべてスキップされます。私は100.00000%SQLインジェクションの何らかの種類がこの前に付いたエラーを過ぎることができないことを確認することはできませんが、私はそこにある可能性がある方法を見ることができません。例では、問題のコードブロックの前でこれを固執することです:
raiserror ('syntax checking, disregard error', 20, 1) with log
構文エラーからだから、このエラーが出:このエラーながら
raiserror ('syntax checking, disregard error', 20, 1) with log
create table t1()
go
create table t2()
go
アウトランタイムエラー(およびT1から/ T2は作成されません)
raiserror ('syntax checking, disregard error', 20, 1) with log
create table t1(i int)
go
create table t2(i int)
go
そして、あなたのオプションを仕上げるために、あなたは、アセンブリC参照することができます:の\ Program Files \ Microsoft SQL Serverは\ 100の\ツール\ Binnの\ VSShell \ Common7 \ IDE \ Microsoft.SqlServerを。 SqlParser.dl lはdbの外部のclrユーティリティで、次のようになります。
SqlScript script = Parser.Parse(@"create proc sp1 as select 'abc' as abc1");
私は正直言ってこれを行う必要はありません。どのような状況下で、条件付きロジックはスクリプトを解析できるかどうかに依存しますか? parseable!= runnable –