3

我知道在 SQL Server 2012 SET FMTONLY 将被弃用之后。我开发了一个复杂的代码生成系统,它分析存储过程的结果并为存储库、数据契约和业务库生成 C# 代码。我正在使用 SET FMTONLY 来分析存储过程的结果集,以了解存储过程正在生成的数据合同。这个合约被生成到一个接口和它的实现中。我能够采用返回多个记录集的存储过程并将数据作为数据合同返回给客户端。

我找不到 SET FMTONLY 的替代品来分析存储过程的所有结果集。有没有人对我如何检索存储过程的每个结果集的列、数据类型等有任何见解?

谢谢你的帮助。

4

1 回答 1

4

SET FMTONLY ON 的缺陷在于它认为所有 SELECT 语句都是无条件的。替换 sp_describe_first_result_set 和 sp_describe_first_result_set_for_object 仅返回第一个结果集的元数据,因此在您的情况下不起作用。在元数据不兼容的多个结果的情况下,这些过程也会引发错误。

我建议您通过对新建和部署的数据库实际执行 procs 来检索 C# 代码中的元数据,使用 SqlDataReader 方法检索元数据。此方法还可以很好地处理动态 SQL。这种方法存在问题的唯一情况是数据契约是否根据传递的值而变化,这无论如何都是一个设计问题。

于 2014-08-19T02:42:28.870 回答