获取 SQL Server 查询元数据

本文关键字:元数据 查询 Server SQL 获取 | 更新日期: 2023-09-27 18:34:05

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

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

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

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

获取 SQL Server 查询元数据

这可能会有所帮助: SqlDataReader.GetSchemaTable(); <</p>

div class="answers">

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

不确定这是否有帮助,但您可以在执行计划中获取一些信息。例如,在前面使用 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>

因此,如果您需要查询中的确切列语句,则很难从计划中获取它。但是,如果允许自定义格式,只是为了了解列中发生的情况,这种方式可能会有所帮助。