首页 > 解决方案 > 一次更新多个值

问题描述

这是我的示例数据

   APSDEV      clusterData       Stylecolor
     1            0012             3456
     2            0013             4567

和更新查询

UPDATE <table name> SET  APS_Dev = 1 FROM <table_name> WHERE d.Style_Color = 0012 AND Cluster_ID = 3456  

UPDATE <table name> SET  APS_Dev = 2 FROM <table_name> WHERE d.Style_Color = 0013 AND Cluster_ID = 4567 

我想要更新查询

  UPDATE <table name>

  SET  APS_Dev = (select          
             (SELECT Item  FROM  fn_split(Dataval,':') where idx in (1))
                from @test)                                              
   FROM <table_name>
   WHERE d.Style_Color in (select 
                 (SELECT Item  FROM  fn_split(Dataval,':') where idx in (3))                            
                           from @test)          

    AND Cluster_ID in     (select 
                  (SELECT Item  FROM  fn_split(Dataval,':')where idx in (2)) 
                            from @test)

出现错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

我知道错误是由于 APS_Dev "=" 符号造成的。任何人都可以建议如何声明值

标签: sqlsql-server

解决方案


不确定我是否完全理解您想要实现的目标,但是如果您拆分 DataVal 并将其推送到临时表的列中,您可以根据多条件 where 子句更新主表。

DECLARE @test TABLE (APSDEV INT
                    ,clusterData NVARCHAR(4)
                    ,stylecolor INT
                    )
DECLARE @toUpdate TABLE (Field1 INT
                        ,Field2 INT
                        ,Field3 INT
                        ,APSDEV INT
                        ,clusterData NVARCHAR(4)
                        ,stylecolor INT
                        )
INSERT  INTO @test
VALUES  (1, '0012', 3456),
        (2, '0013', 4567)
SELECT  *
FROM    @test

INSERT  INTO @toUpdate
VALUES  (1, 1, 1, NULL, '0012', 3456),
        (2, 2, 2, NULL, '0013', 4567)

SELECT  *
FROM    @toUpdate

UPDATE  @toUpdate
SET     APSDEV = [@test].APSDEV
FROM    @toUpdate
JOIN    @test ON [@test].clusterData = [@toUpdate].clusterData
                 AND [@test].stylecolor = [@toUpdate].stylecolor

SELECT  *
FROM    @toUpdate

如果我错过了您要达到的目标,请告诉我。


推荐阅读