首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS SQL SERVER 2008 RS外部应用和空RS

MS SQL SERVER 2008 RS外部应用和空RS
EN

Stack Overflow用户
提问于 2015-12-14 19:26:59
回答 2查看 69关注 0票数 1

我的第一个问题一直潜伏在这里。

我有以下表格:

  • 账号
  • 电子邮件
  • PhoneNumbers

我想从帐户中获取所有信息,对于每个账户记录,最近的1位来自电子邮件和PhoneNumbers,其中Accounts.ID = Emails.AcctID或Accounts.ID = PhoneNumbers.AcctID。

我的RS当前是:从帐户中选择ACCT.*作为ACCT外部应用(从电子邮件中选择E.E_AcctID = ACCT.ACCT_ID ORDER BY E.E_ID DESC) EM外部应用(从PhoneNumbers选择PhoneNumbers 1 PH.*从PhoneNumbers选择PH.PH_AcctID = ACCT.ACCT_ID ORDER BY PH_ID DESC) PH > 2;

问题是,并非每个账户都有相应的电子邮件或PhoneNumbers记录。

因此,一些应用RS返回为空,然后我得到这个RS错误:在与请求的名称或序号对应的集合中找不到ADODB.Recordset错误'800a0cc1‘项。

知道我怎么能在空记录集周围工作吗?

在此之前,非常感谢您。干杯,诺亚

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-14 21:58:22

问题解决了!!

在RS的开头,我用“*”替换了“ACCT.*”,这就成功了。我无意中排除了其他桌子!

感谢所有观看和评论的人!

票数 0
EN

Stack Overflow用户

发布于 2015-12-14 22:28:27

假设每个表中都有一个created_datetime列来指定最近的行,我们可以使用RowNumber函数来完成这项工作,参见下面的示例

代码语言:javascript
复制
declare @ACCOUNTS table (ID_ACC int)
declare @EMAILS table (EMAIL VARCHAR(50), ID_ACC int, CREATED_DATETIME DATETIME)
declare @PHONES table (PHONE VARCHAR(50), ID_ACC int, CREATED_DATETIME DATETIME)


insert into @ACCOUNTS
SELECT '1' ID_ACC
UNION ALL 
SELECT '2' ID_ACC
UNION ALL 
SELECT '3' ID_ACC

INSERT INTO @EMAILS
SELECT 'MyEmail@test.com' EMAIL,'1' ID_ACC, '2015-12-14 22:00:00' CREATED_DATETIME
UNION ALL 
SELECT 'MyNewemail@test.com' EMAIL,'1' ID_ACC, '2015-12-14 22:53:00'
UNION ALL 
SELECT '3rdemail@test.com' EMAIL,'3' ID_ACC, '2015-12-14 22:54:00'
UNION ALL 
SELECT 'NEW3rdemail@test.com' EMAIL,'3' ID_ACC, '2015-12-14 22:55:30'


INSERT INTO @PHONES
SELECT '00213555555' PHONE,'1' ID_ACC, '2015-12-14 22:10:00' CREATED_DATETIME
UNION ALL 
SELECT '00213554444' PHONES,'2' ID_ACC, '2015-12-14 22:54:00'
UNION ALL 
SELECT '00213556666' PHONES,'3' ID_ACC, '2015-12-14 22:54:00'
UNION ALL 
SELECT '00213557777' PHONES,'3' ID_ACC, '2015-12-14 23:10:00'

 SELECT 
 *
 FROM
 (SELECT 
 ROW_NUMBER () over (partition by A.ID_ACC order by E.CREATED_DATETIME DESC,P.CREATED_DATETIME DESC) AS ROW_ORDER,
 A.ID_ACC,
 E.EMAIL,
 P.PHONE
 FROM @ACCOUNTS as A
 left join @EMAILS as E
 on A.ID_ACC=E.ID_ACC
 left join @PHONES as P
 on A.ID_ACC=P.ID_ACC) AS TAB
 WHERE TAB.ROW_ORDER=1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34275039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档