需要更新表格

时间:2018-05-09 10:51:01

标签: sql sql-server

我需要更新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的值)。

1 个答案:

答案 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;