問題タブ [sql-parser]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - T-SQL を解析して WHERE 句の一部を抽出する
「曲線」を含む大規模な SQL データベースがあります。各カーブには ID (curveid) があります。各曲線の主なユーザーと、それが使用されているかどうかを判断しようとしています. これを可能にするために、DBA はデータベースに対して実行されたすべてのステートメントのログを提供しています。
これらのステートメントは非常に複雑になる可能性があります。私がやりたいのは、どのcurveidが照会されているかを抽出することだけです。
ステートメントの例は次のとおりです。
このステートメントから、私が興味を持っているのは、ユーザーがcurveid 90564を照会したことを抽出することだけです.
このステートメントは、次のいずれかに似ている場合もあります。
また
繰り返しますが、私が知りたいのは曲線 ID だけです。他の条項は気にしません。
Microsoft.SqlServer.TransactSql.ScriptDom 名前空間を使用して SQL を解析し、以下のようなコードを使用してすべての WHERE ステートメントを識別できるようになりました (他のいくつかのサンプルからつなぎ合わせました)。
whereVisitor.WhereStatements の各句 (この例では 3 つ) は、SearchCondition というプロパティを公開します。残念ながら、これは私がアイデアを使い果たしたところです。私が達成したいのは、以下のようなロジックです。
その他の詳細:
- C# (.net 4.0) の使用
- SQL Server 2008
- このための DLL は Microsoft.SqlServer.TransactSql.ScriptDom です (私の場合は 'c:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules\SQLPS\Microsoft.SqlServer.TransactSql.ScriptDom.dll にあります) ')
編集 1
いくつかの追加情報:
- CurveID は別のテーブルへのキーです。この場合、それを操作しても意味がありません (たとえば、curveId+1 または curveId <= 10)。
編集 2 (部分的な解決策)
次の訪問者を持つことは、節がcurveid = 123に似ている場合に役立ちます:
hana - Java based SQLParser for parsing Hana SQL Queries
Is there any open source JAVA SQL parser for parsing SAP HANA based SQL Queries? Tried using JSQLParser but it doesn't fully support for Hana based functionalities.
sql - ストアド プロシージャ構文を使用した Python の 'sqlparse' モジュールのエラー
sqlparse モジュールで分割メソッドを使用して、クエリ ファイルをクエリ リストに分割しようとしています。「プロシージャの作成」クエリを使用すると、正しく分割されます。しかし、「replace procedure」を使用すると、1 つのクエリが 2 つのクエリに分割されます。セミコロンで区切り、begin と end を無視しています。