1

我正在将 Web 表单项目转换为 ASP.NET MVC 4 项目。

在这个项目中,我们的 .NET 团队不允许修改现有的存储过程,最多允许我们为这个存储过程编写一个包装器。即我们可以创建另一个存储过程来调用现有的存储过程。

现有的存储过程属于以下类型

condition 1
  Select A,B,C,D from Table
condition 2
  Select ErrorCode as 100, ErrorMessage as 'Correct that'
condition 3
  Select ErrorCode as 101, ErrorMessage as 'Correct this'
condition 4
  Select ErrorCode as 102, ErrorMessage as 'Not found' from Table

我在这个项目中使用实体框架,它需要预先映射一个复杂类型,因此对于上述类型的存储过程,我已将复杂类型声明为

Complex Type :- SomeComplexType

    string A;
    string B;
    string C;
    string D;

    int ErrorCode;
    string ErrorMessage;

现在我的问题是缺乏 SQL 知识和语法,我在 google 和 SO 上搜索了很多,但在这方面找不到任何东西。

我想知道如何围绕这个现有的存储过程创建一个包装器,如下所示。

condition 1
  Select A,B,C,D,ErrorCode as NULL, ErrorMessage as NULL from Table
condition 2
  Select A,B,C,D,ErrorCode as 100, ErrorMessage as 'Correct that' from Table
condition 3
  Select A,B,C,D,ErrorCode as 101, ErrorMessage as 'Correct this' from Table
condition 4
  Select A as NULL, B as NULL, C as NULL, D as NULL,ErrorCode as 102, ErrorMessage as 'Not found' from Table

因此,如果我能够从 SQL 发送数据,如上所示,我可以使用 Entity Framework 的函数导入和复杂类型轻松处理它。

如何检查(在包装存储过程中)返回的结果集(从现有存储过程中)?

请指导我对此的想法。谢谢

4

1 回答 1

2

编辑:旧帖子没有帮助,添加更多信息只是为了帮助搜索:

好的,我google了一下,我真的找不到任何方法来解决你的问题;虽然我发现了一些有用的链接:

如何在存储过程之间共享数据并将存储过程结果插入到临时表中

我希望第二个有用,但是当我尝试时,OPENROWSET我得到了这个错误:

无法确定元数据,因为过程 'testSP' 中的语句 'SELECT '1','2','3'' 与过程 'testSP' 中的语句 'SELECT 100,200' 不兼容。

所以我想这不是正确的方法。

现在,我剩下的唯一想法是:

  • 重写旧的 SP 而不是构建一个包装器
  • 你能找到一种方法来根据输入值确定返回的结果集吗?如果可能的话,您可以使用 if / else 为临时表选择适当的列,您将在其中插入数据,然后构建复杂的数据类型

很抱歉我帮不上忙

编辑(再次):

第一个链接说(在 CLR 章节):

回顾一下,以下是 INSERT-EXEC 失败的主要情况,您需要求助于 CLR:

被调用的过程返回几个具有不同结构的结果集。SQL Server 中的许多系统过程都是如此。

所以我建议你阅读这一,也许它会有用

于 2012-11-15T16:47:32.160 回答