問題タブ [scriptdom]
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.
sql-server - scriptdom API を使用して相互データベース参照を抽出する方法
Microsoft は、TSQL を解析および生成するためのscriptdom
APIを公開しました。私はそれに慣れていないので、まだ遊んでいます。このようなクエリからデータベース間の参照を取得する方法を知りたいです。
私が欲しいのは参考文献のリストです:
ただし、最後のエントリについてはdatabase2.dbo.table4.id = database2.dbo.table2.t4_id
、両端の列の両方が同じデータベースからのdatabase2
ものであり、これは私が望むものではありません。したがって、最終的に必要な結果は次のとおりです。
で実装することは可能scriptdom
ですか?
c# - プロシージャから SelectStatement を取得するには?
これはhereからのフォローアップの質問です。T4 テンプレートを使用して SSDT プロジェクトからラッパー関数を生成できるように、 DACExtensionsSelectStatement
を使用してからオブジェクトを取得しようとしています。Procedure
問題は、Visitor オブジェクトの Nodes プロパティにノードが含まれていないことです。私は何が欠けていますか?
これが私の訪問者です:
そして、これが私がそれを使用しようとしている方法です:
c# - scope_identity() などの FunctionCall のデータ型を取得する
のインスタンスがある場合Microsoft.SqlServer.TransactSql.ScriptDom.FunctionCall
、関数によって返される値のデータ型を取得するにはどうすればよいですか?
c# - SELECTの列がnullになる可能性があるかどうかを検出する方法は?
デザインタイムに DacFx を使用して、SSDT データベース プロジェクトの sql ファイルから生成される C# データ レイヤーを作成しています。私が話していることを確認するには、Github で私のSqlSharpener プロジェクトを参照してください。
ストアド プロシージャの SELECT ステートメントから返される行を表す DTO オブジェクトを生成しています。DTO のプロパティが null 許容値型であるべきかどうかを判断するために、元のテーブルで列が null 許容かどうかを確認しています。それがどのように見えるか興味がある場合は、ここにコードがあります。(ここの tSqlObject はTSqlObject
、ストアド プロシージャのインスタンスです)
問題は、左または右の外部結合を考慮していなかったため、値が null になる可能性があることです。
SELECT ステートメントの列が null になる可能性があるかどうかを判断するにはどうすればよいですか? または、その質問が広すぎる場合、列が外部結合されたままのテーブルからのものであるかどうかをどのように判断できますか?
c# - TSql100Parser コードで紛らわしいと見なされる「as」キーワード
SQLステートメントを解析したいとします
また、順序付けに使用する列と方向をプログラムで決定します。いくつかのグーグル検索の後、ここに私が思いついたものがあります:
このコードは正常に動作しますが、非常に紛らわしいと思います。「as」キーワードが奇妙に思える場所が 2 つあります。
これらの最初のものは 6 行目です。TsqlScript は TSqlFragment のサブクラスなので、サブクラスにキャストできたのは幸運だったと思います。しかし、3 行目の Parse メソッドの戻り値の型である TSqlFragment には有用なプロパティはなく、そのサブクラスだけに有用なプロパティがあります。では、たまたまクラスを別のものにキャストすることがわかっている場合にのみ役立つクラスを公開するのは、どのような種類の API でしょうか?
2 番目の "as" のより紛らわしい使用法は、内側の foreach で使用されます。ExpressionWithSortOrders を ColumnReferenceExpressions に変更した可能性はありますか? これらはインターフェイスではなくクラスであり、互いに継承しません。私が知る限り、それらは相互に明示的または暗黙的な変換を行っていません。
より一般的に言えば、このような API の操作をどのように学習できるでしょうか? このキャストについては、公式の scriptdom ドキュメントで何も見つかりませんでした。Visual Studio は、これらのクラスを相互に変換できることを教えてくれません。
sql-server - 何百ものストアド プロシージャから完全な動的 SQL 式を解析する
何百ものストアド プロシージャがあり、その多くが動的 SQL を使用する大規模なアプリケーションを継承しました。扱っている SQL の種類をより適切に処理するには、これらすべてのストアド プロシージャのクエリ テキストを解析し、含まれている動的 SQL の完全な式を抽出する方法があれば非常に便利です。
単純化された式は次のようになります。
上記に対して求めている出力 (最終的には、すべてのストアド プロシージャを解析する単一のクエリで呼び出される) は次のとおりです。
したがって、パラメーター値が渡された後の式ではなく、パラメーター名を含むストアド プロシージャ テキストのような式テキストです。
動的 SQL パラメータ名が であるというまったく安全ではない仮定で問題ない@query
ので、SQL 式内でこれを検索して、テキストを抽出する開始位置として使用することは許容できますが、インラインには一重引用符があるためです。 、変数への割り当てがどこで完了したかを知る簡単な方法がありません。
この質問に [antlr] タグと [parsing] タグを含めているのは、これが T-SQL の能力を超えていると感じているからです。
PS: はい、「これを行うべきではない」ことは十分承知しています。
編集
以下の提案から、次のクエリを試しましたが、このコンテキストではあまり役に立ちませんでした: