0

我的问题是是否可以在 C# 中使用本机或其他 API 或在 SQL Server 中访问 SQL 查询的元数据。

在处理标准语句时查找模式信息很容易SELECT,但在执行以下操作时变得更加困难:

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

目标是找出CountResult创建别名的语句的源列,甚至找出语句。

4

3 回答 3

0

这可能会有所帮助:SqlDataReader.GetSchemaTable();

于 2012-05-14T22:04:59.140 回答
0

动态管理视图 (DMV) 还提供了相当多的系统信息。要获取快速列表,您可以在此博客中运行此查询列表。DMV 的名称是不言自明的。

于 2012-05-14T22:06:48.937 回答
0

不确定这是否有帮助,但您可以在执行计划中获得一些信息。例如,之前使用 SET SHOWPLAN_XML ON 语句执行您的查询。它返回包含有关语句的详细信息的 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 回答