0

私が持っている質問は、ネイティブまたは他の API を使用して C# で、または SQL Server で SQL クエリのメタデータにアクセスできるかどうかです。

標準ステートメントを扱う場合、スキーマ情報を見つけるのは簡単ですSELECTが、次の行に沿って何かを行うと、より困難になります。

SELECT COUNT(DISTINCT [ColumnA]) as 'CountResult' 
FROM MyTable

目標はCountResult、エイリアスを作成したステートメントのソース列を見つけることです。

4

3 に答える 3

0

これが役立つかどうかはわかりませんが、実行プランでいくつかの情報を取得できます。たとえば、前にSETSHOWPLAN_XMLONステートメントを使用してクエリを実行します。ステートメントに関する詳細情報を含むxmlを返します。唯一の問題は、情報がたくさんあることです。そのため、単純なクエリサンプルでは、​​出力列のリストに対してこのようなコードを取得します。

<OutputList>
    <ColumnReference Column="Expr1234" />
</OutputList>

Expr1234を見ると、Expr2345の結果がintにキャストされていることがわかります。

<ColumnReference Column="Expr1234" />
<ScalarOperator ScalarString="CONVERT_IMPLICIT(int,[Expr2345],0)">
    <Convert DataType="int" Style="0" Implicit="1">
        <ScalarOperator>
            <Identifier>
                <ColumnReference Column="Expr2345" />
            </Identifier>
        </ScalarOperator>
    </Convert>
</ScalarOperator>

次のステップは、Expr2345を見つけることです。ここで、これは次のようになります。

<ColumnReference Column="Expr2345" />
<ScalarOperator ScalarString="Count(*)">
    <Aggregate AggType="countstar" Distinct="0" />
</ScalarOperator>

したがって、クエリの場合と同じように正確な列ステートメントが必要な場合、計画から取得するのは困難です。ただし、カスタム形式が許可されている場合は、列で何が発生するかを理解するために、この方法が役立つ場合があります。

于 2012-05-15T06:15:44.190 に答える
0

これは役立つかもしれません:SqlDataReader.GetSchemaTable();

于 2012-05-14T22:04:59.140 に答える
0

動的管理ビュー (DMV) もかなりの量のシステム情報を提供します。クイック リストを取得するには、このブログでこのクエリ リストを実行できます。DMV の名前は一目瞭然です。

于 2012-05-14T22:06:48.937 に答える