selectステートメントの各フィールドの元になるテーブル/フィールドの実際の名前を取得できるかどうかは疑問です。SQL Selectステートメントに関する情報を取得する方法
債権者と債権者の両方に2つのテーブルがあるとします。債権者と債務者の両方にコード、名前、電話のフィールドがあります。
ユーザーは、次のSQL文を入力した場合:
SELECT Code AS CustomerCode, Name AS CustomerName, Phone AS ContactNumber FROM Debtors.
これは、フィールド名CustomerCode、顧客名やContactNumberを返すSQLサーバになります。
SQLサーバーから各フィールドを実際の名前とそのテーブルにマップする何らかのメタデータを取得できますか?
プログラムでは、SQLのselect文が与えられているので、各フィールドの実際の名前と、それらのテーブルの実際の名前を判別できるようにしたいと考えています。
SQLを自分自身で解析したくないので、SQL Serverに文を送信し、行データなしでこの情報を返すことができると考えました。
私たちがやっていることは、テーブル/フィールドレベルのセキュリティを実装することです。ユーザーは、SQLステートメントを入力して、表からフィールドを選択したり、複数の表にまたがって(結合を使用して)結果を表に表示することができます。フィールドはグリッドコントロールに動的に追加されますが、ユーザーに表示されるフィールドのみが動的に追加されます。
ユーザが複数のテーブルに参加すると、どのフィールドがどのテーブルから来るのか、どのようにプログラム的に知ることができますか? SQLでエイリアスを使用すると、問題は悪化します。
現在、これは独自のデータベースを使用する社内組み込みSQLエンジンで動作しています。このエンジンは、行データなしで必要なすべてのテーブル/フィールド情報を返すことができるため、アプリケーションセキュリティモデルの一部がこれを中心に構築されています。しかし、このアプリケーションをSQLサーバのようなものに動かすことは、これを動作させることができなければ難しいかもしれません。
SQLサーバーのほかに、他のSQLデータベースもこのタイプの機能をサポートしていますか?
結果セットの列が常に直接表の列にマップされるとは限らないため、これは一般的なやり方では難しいことです。(実際、彼らはしばしばそうしません)。テーブルAとテーブルBの行の値の合計である結果列を持つことができます。または、結果セットに表示されていない結合にデータが使用されているテーブルを持つことができます。 – payne