Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 r2 使用子查询sql server 2008更新_Sql Server 2008 R2 - Fatal编程技术网

Sql server 2008 r2 使用子查询sql server 2008更新

Sql server 2008 r2 使用子查询sql server 2008更新,sql-server-2008-r2,Sql Server 2008 R2,有两个更新查询,第一个更新查询成功执行,但第二个更新查询未执行,并显示以下消息: Msg 512,16级,状态1,第10行 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。声明已终止 第一次更新查询: update dbo.TblPrePostApproval set dbo.TblPrePostApproval.PAApprovedDate = (select dbo.TblMasterInfo.AppRefDate

有两个更新查询,第一个更新查询成功执行,但第二个更新查询未执行,并显示以下消息:

Msg 512,16级,状态1,第10行
子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。声明已终止

第一次更新查询:

update dbo.TblPrePostApproval 
set 
    dbo.TblPrePostApproval.PAApprovedDate = (select dbo.TblMasterInfo.AppRefDate 
                                             from dbo.TblMasterInfo 
                                             Where dbo.TblMasterInfo.Appid = dbo.TblPrePostApproval.Appid),
    dbo.TblPrePostApproval.PAApprovedTenor = '36',
    dbo.TblPrePostApproval.PAApprovedAmt = (select dbo.TblMasterInfo.AppReqeustAmt 
                                            from dbo.TblMasterInfo 
                                            where dbo.TblPrePostApproval.Appid = dbo.TblMasterInfo.AppID),  
    dbo.TblPrePostApproval.PADisbBr = (select dbo.TblMasterInfo.AppSourceBrName 
                                       from dbo.TblMasterInfo 
                                       where dbo.TblPrePostApproval.Appid = dbo.TblMasterInfo.AppID)
第二次更新查询

update dbo.TblPrePostApproval   
set 
   dbo.TblPrePostApproval.PAApprovedDate = (select dbo.TestPost.PADate 
                                            from dbo.TestPost 
                                            Where dbo.TestPost.Appid = dbo.TblPrePostApproval.Appid),
   dbo.TblPrePostApproval.PAApprovedTenor = (select dbo.TestPost.PATenor 
                                             from dbo.TestPost 
                                             Where dbo.TestPost.Appid = dbo.TblPrePostApproval.Appid),
   dbo.TblPrePostApproval.PAApprovedAmt = (select dbo.TestPost.PAAmt 
                                           from dbo.TestPost 
                                           where dbo.TestPost.Appid = dbo.TblPrePostApproval.AppID),    
   dbo.TblPrePostApproval.PADisbBr = (select dbo.TestPost.PABr 
                                      from dbo.TestPost 
                                      where dbo.TestPost.Appid = dbo.TblPrePostApproval.AppID)

我的问题在哪里?请大家建议我。

您的一个子查询(我猜在第10行)返回了不止一行,因此它无法检查它是否等于任何值,因为它是一个集合,而不是一个值。只需将查询更改为更具体。尝试将
LIMIT 0、1
添加到子查询的末尾,或在每个子查询中的
SELECT
之后添加
TOP(1)

为什么不使用
JOIN
s进行更新?更容易阅读和理解

问题#1:

问题2:


我的更新查询是正确的,但我发现两个表中都有多个raw可用。我通过更正这些表解决了我的问题。我的更新查询是正确的,但两个表中都有多个可用的原始数据。我解决了我的问题,纠正这些表的原始。谢谢Golgothan先生
UPDATE ppa
SET
    PAApprovedDate = info.AppRefDate,
    PAApprovedTenor = '36',
    PAApprovedAmt = info.AppReqeustAmt,
    PADisbBr = info.AppSourceBrName 
FROM
    dbo.TblPrePostApproval ppa
INNER JOIN 
    dbo.TblMasterInfo.TblMasterInfo info ON info.Appid = ppa.Appid
UPDATE ppa
SET
   PAApprovedDate = tp.PADate,
   PAApprovedTenor = tp.PATenor,
   PAApprovedAmt = tp.PAAmt,    
   PADisbBr = tp.PABr
FROM
    dbo.TblPrePostApproval ppa
INNER JOIN 
    dbo.TestPost tp ON tp.Appid = ppa.AppID