我想更新一个表中的字段 TicketUser
,其中记录是从另一个表中获取的字段 CreatedBy
。
我面临以下错误:
消息 512,级别 16,状态 1,第 16 行 子查询返回了 1 个以上的值。当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的。
我的查询如下:
UPDATE Incidence SET TicketUser = (select CreatedBy from AssignedRoles inner join Incidence on
Incidence.RegistrationID=AssignedRoles.RegistrationID
WHERE AssignedRoles.CreatedOn = Incidence.DateServed and TicketUser=0)
FROM Incidence INNER JOIN AssignedRoles on
AssignedRoles.RegistrationID=Incidence.RegistrationID
WHERE Incidence.RegistrationID = AssignedRoles.RegistrationID
我该如何解决这个问题?
答案 0 :(得分:0)
与错误一样,您的子查询返回了多个值,无法正确执行更新。我不确定您要寻找的最终结果,但是您可以通过将 TOP (1)
添加到您的子查询中来消除这种情况,如下所示,可能使用 ORDER BY
取决于您需要返回的内容。>
UPDATE Incidence SET TicketUser = (select TOP(1) CreatedBy from AssignedRoles inner join Incidence on
Incidence.RegistrationID=AssignedRoles.RegistrationID
WHERE AssignedRoles.CreatedOn = Incidence.DateServed and TicketUser=0)
FROM Incidence INNER JOIN AssignedRoles on
AssignedRoles.RegistrationID=Incidence.RegistrationID
WHERE Incidence.RegistrationID = AssignedRoles.RegistrationID
答案 1 :(得分:0)
我怀疑您想要一个相关子查询,而不是子查询中的 join
。然后我认为您只想更新 0
值。所以我推测这就是你想要的:
UPDATE Incidence
SET TicketUser = (select ar.CreatedBy
from AssignedRoles ar
where ar.RegistrationID = Incidence.RegistrationID and
ar.CreatedOn = Incidence.DateServed
)
WHERE TicketUser = 0;
答案 2 :(得分:0)
我摆脱了连接,下面的 SQL 脚本对我有用。
update incidence
set ticketuser = Assignedroles.createdby from Assignedroles inner join incidence on
Incidence.registrationID = Assignedroles.registrationid
where Incidence.registrationID = Assignedroles.registrationid and
Assignedroles.ModifiedOn = dateserved and incidence.ticketuser = 0