Sql server 2008 r2 使用子查询sql server 2008更新
有两个更新查询,第一个更新查询成功执行,但第二个更新查询未执行,并显示以下消息: Msg 512,16级,状态1,第10行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
子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。声明已终止 第一次更新查询:
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