我的问题是,是否可以使用本机或其他API在C#中或在SQL Server中访问SQL查询的元数据。
在处理标准SELECT
语句时,查找架构信息很容易,但在执行以下操作时会变得更加困难:
SELECT COUNT(DISTINCT [ColumnA]) as 'CountResult'
FROM MyTable
目标是找出CountResult
的源列,或者甚至只找到创建别名的语句。
答案 0 :(得分:0)
这可能有所帮助:SqlDataReader.GetSchemaTable();
答案 1 :(得分:0)
动态管理视图(DMV)还提供了相当多的系统信息。要获得快速列表,您可以在此blog中运行此查询列表。 DMV名称非常明显。
答案 2 :(得分: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>
因此,如果您在查询中需要精确的列语句,则很难从计划中获取它。但是如果允许自定义格式,只是为了理解列中发生的事情,这种方式可能会有所帮助。