Sql 两个存储过程结果集的合并应该在数据库端还是在API端进行?

Sql 两个存储过程结果集的合并应该在数据库端还是在API端进行?,sql,sql-server-2012,Sql,Sql Server 2012,下面是API,我需要创建一个新的存储过程来返回它。“MemberCard”前面的上部有一个可以输出它的存储过程,“MemberCard”的子细节也有自己的存储过程。如何以下面相同的格式组合这两个存储过程的结果集?还是Java API应该合并2个sp的结果集 样本响应: { "Action":"MemberLogin3", "CardNumber":"00000376", "MemberMobilePhone":"94600240", "SMSValidation":1

下面是API,我需要创建一个新的存储过程来返回它。“MemberCard”前面的上部有一个可以输出它的存储过程,“MemberCard”的子细节也有自己的存储过程。如何以下面相同的格式组合这两个存储过程的结果集?还是Java API应该合并2个sp的结果集

样本响应:

{  
   "Action":"MemberLogin3",
   "CardNumber":"00000376",
   "MemberMobilePhone":"94600240",
   "SMSValidation":1,
   "MemberToken":"",
   "PWDFailRetryCount":10,
   "CheckResult":"0",
   "EmailValidation":1,
   "ResponseCode":0,
   "Type":"Manual",
   "MemberCreatedOn":"2014-12-16 09:33:04",
   "MemberID":49,
   "MemberDefLanguage":"us",
   "CountryCode":"00852",
   "ReadReguFlag":0,
   "MemberCard":[  
      {  
         "OctopusID":"12455678|0",
         "BrandPicGFile":"",
         "CardTypeName":"",
         "CardExpiryDate":"2075-04-01",
         "CardGradePicFile":"/tap/FileManagement/26/20120702_629Tvi.png",
         "MinPointPreAdd":"",
         "MinPointPreTransfer":"",
         "TotalPoints":"1000",
         "CardGrade":"1",
         "BrandID":"1",
         "MaxPointPreTransfer":"0",
         "MemberSex":"2",
         "HomeTelNum":"29504288",
         "BrandPicSFile":"",
         "MemberEngGivenName":"",
         "CountryCode":"852",
         "MaxAmountPreTransfer":"",
         "LaserID":"",
         "MaxAmountPreAdd":"1000.0000",
         "CardNumber":"000100086",
         "CardPointToAmountRate":"100.000000",
         "GracePeriodValue":"",
         "BrandPicMFile":"",
         "MaxPointPreAdd":"",
         "MinAmountPreAdd":"100.0000",
         "MemberRegisterMobile":"85294906037",
         "CardGradeNotes":"",
         "MemberYearofBirth":"1985",
         "GracePeriodUnit":"",
         "MemberIdentityRef":"",
         "MemberEngFamilyName":"",
         "MemberIdentityType":"",
         "MemberMonthofBirth":"6",
         "CardGradeMaxPoint":"",
         "CardTypeID":"",
         "MemberDayofBirth":"1985-06-04",
         "MemberChiFamilyName":"",
         "MemberChiGivenName":"",
         "MinAmountPreTransfer":"",
         "CardStatus":"2",
         "TotalAmount":"1000.00",
         "CardAmountToPointRate":"1.000000",
         "MemberMobilePhone":"94906037",
         "CardAmountExpiryDate":"2013-10-17",
         "CardPointExpiryDate":"2013-10-17",
         "UpdatedOn":"2014-04-17 14:50:10",
         "MemberQRCode":"Q7FM1110339d9b35928d4b8f09235b87a4cd1dd23cf404b"
      }
   ]
}

以下是将resultset合并到单个SP中的操作

  • 假设您的表名是Member(主表)和MemberCard(子表),并且从Member到MemberCard具有一对多关系
  • 左键连接主(成员)和子(成员卡)表,该表将生成单个结果集。这将为每个membercard生成一行,这意味着如果一个成员有多个membercard,您将获得重复的成员详细信息;如果成员没有membercard,则membercard的值为空
  • 在JavaAPI中,您可以对成员执行内存分组,并生成所需的对象结构
  • 存储过程的示例查询

    SELECT 
     M.Action,
     M.CardNumber,
     M.MemberMobilePhone,
     M.SMSValidation,
     M.MemberToken
     --Other fields from Member table
     MC.OctopusID,
     MC.BrandPicGFile,
     MC.CardTypeName,
     MC.CardExpiryDate
     -- Other fields from MemberCard table
    
    FROM Member M
    LEFT OUTER JOIN MemberCard MC ON MC.MemberId = M.MemberId
    --Your filter conditions etc 
    

    你没有提到合并到单SP中的目的,但是如果你想减少数据库调用,那么你可以考虑上面的方法。此外,如果您的结果集很大,请在SQL查询中应用分页

    谢谢,你的回答足够了。