案例sql不工作时的更新

案例sql不工作时的更新,sql,Sql,我试图从一个表中更新两个字段:FirstName和LastName,从同一个表中获取数据,但是从包含first和LastName的Name字段中获取数据 我试过: UPDATE Table SET FirstName = (SELECT CASE WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1) ELSE name END

我试图从一个表中更新两个字段:FirstName和LastName,从同一个表中获取数据,但是从包含first和LastName的Name字段中获取数据

我试过:

UPDATE Table SET FirstName = (SELECT CASE
                WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1) 
                ELSE name 
                END 
                    from Table), 
LastName = (select CASE
         WHEN name LIKE '% %' THEN RIGHT(name, Charindex(' ', Reverse(name)) - 1)
       END  from Table)

我收到以下错误消息:子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。

您不需要子查询,只需要逻辑:

UPDATE Table
    SET FirstName = (CASE WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1) 
                          ELSE name 
                     END),
        LastName = (CASE WHEN name LIKE '% %' THEN RIGHT(name, Charindex(' ', Reverse(name)) - 1)
                    END
                   );
或者,添加一个
where
语句并执行两个更新:

UPDATE Table
    SET FirstName = LEFT(name, Charindex(' ', name) - 1),
        LastName = RIGHT(name, Charindex(' ', Reverse(name)) - 1)
    WHERE name LIKE '% %';

UPDATE TABLE
    SET LastName = NULL
    WHERE name not like '% %';

如果字段已为
NULL

请检查子查询,则可能不需要第二个字段。错误本身就说明了这一点。它不能允许超过1个值。它必须只返回一个值。你用的是两张不同的桌子吗?只能将表视为tablename。答案将取决于后端,尽管消息听起来确实像SQL Server,但您可能需要重新编写它,以便不存在子查询。在我看来,您不应该需要这些子查询。案例陈述是的,子查询不是。你说得对,杰里米·库克!:)