我需要更新Old Value属性中的表1。我们可以在套装中使用select吗?我完全没有看到任何问题......
代码:
declare @oldvalue int
set @oldvalue=1
UPDATE [table_1]
SET OldValue=(SELECT Description
FROM table2
WHERE OldValue=@oldvalue)
WHERE ChangedField='UAC' and OldValue=@OldValue and convert(date, LastChangeDate) ='2018-05-05' and id=875304
它抛出了这个错误:
Msg 512,Level 16,State 1,Line 4 Subquery返回的值超过1 值。当子查询遵循=,!=,<,< =,
时,不允许这样做,> =或当子查询用作表达式
时
为什么?部分(SELECT描述
从table2
在哪里OldValue = @ oldvalue)
只提供一条记录(我尝试过从1到10的值)。
答案 0 :(得分:1)
使用子查询更新值时,应确保子查询仅返回1行,否则将出现此错误。
所以你可以尝试下面的任何一个
方法#1 - 使用热门
DECLARE @oldvalue INT;
SET @oldvalue = 1;
UPDATE [table_1]
SET
OldValue =
(
SELECT TOP [Description]
FROM table2
WHERE OldValue = @oldvalue
)
WHERE ChangedField = 'UAC'
AND OldValue = @OldValue
AND CONVERT(DATE, LastChangeDate) = '2018-05-05'
AND id = 875304;
方法#2 - 使用加入(推荐)
DECLARE @oldvalue INT;
SET @oldvalue = 1;
update t1
set OldValue = t2.[Description]
FROM [table_1] t1
inner join table2 t1
on t1.OldValue = t2.OldValue
AND t1.ChangedField = 'UAC'
AND t1.OldValue = @OldValue
AND t1.CONVERT(DATE, LastChangeDate) = '2018-05-05'
AND t1.id = 875304;