Sql 出现错误,(当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式)

Sql 出现错误,(当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式),sql,sql-server,Sql,Sql Server,从子查询中删除LEN(EpfNo): UPDATE tblEmployee SET EPFNo=RIGHT('0000'+CAST(EpfNo AS VARCHAR(4)),4) WHERE EPFNo IN (SELECT EPFNo,LEN(EpfNo) FROM tblEmployee GROUP BY tblEmployee.EPFNo HAVING LEN(EpfNo) = 4) UPDATE tblEmployee SET EPFNo=RIGHT('0000'+CAST(EpfNo

从子查询中删除
LEN(EpfNo)

UPDATE tblEmployee SET EPFNo=RIGHT('0000'+CAST(EpfNo AS VARCHAR(4)),4)
WHERE EPFNo IN (SELECT EPFNo,LEN(EpfNo) FROM tblEmployee
GROUP BY tblEmployee.EPFNo
HAVING LEN(EpfNo) = 4)
UPDATE tblEmployee SET EPFNo=RIGHT('0000'+CAST(EpfNo AS VARCHAR(4)),4)
WHERE EPFNo IN (SELECT EPFNo FROM tblEmployee
GROUP BY tblEmployee.EPFNo
HAVING LEN(EpfNo) = 4)

在这种情况下,不能指定超过1列(如错误所述)

您的具体问题是
选择中的
len()
。然而,我认为这种逻辑是没有道理的

首先,在子查询中不需要聚合:

UPDATE tblEmployee SET EPFNo=RIGHT('0000'+CAST(EpfNo AS VARCHAR(4)),4)
WHERE EPFNo IN (SELECT EPFNo,LEN(EpfNo) FROM tblEmployee
GROUP BY tblEmployee.EPFNo
HAVING LEN(EpfNo) = 4)
UPDATE tblEmployee SET EPFNo=RIGHT('0000'+CAST(EpfNo AS VARCHAR(4)),4)
WHERE EPFNo IN (SELECT EPFNo FROM tblEmployee
GROUP BY tblEmployee.EPFNo
HAVING LEN(EpfNo) = 4)
写完之后,我注意到您正在比较
EPFNo
。带或不带子查询的长度相同。因此,这应该是相同的:

UPDATE tblEmployee
    SET EPFNo = RIGHT('0000' + CAST(EpfNo AS VARCHAR(4)), 4)
    WHERE EPFNo IN (SELECT e2.EPFNo
                    FROM tblEmployee e2
                    WHERE LEN(e2.EpfNo) = 4
                   );
那么你是对的。但长度已经是4

出于某种原因,我怀疑你想要这样的东西:

UPDATE tblEmployee
    SET EPFNo = RIGHT('0000' + CAST(EpfNo AS VARCHAR(4)), 4)
    WHERE LEN(EpfNo) = 4;
更新tblEmployee
设置EPFNo=RIGHT('0000'+LTRIM(RTRIM(EPFNo)),4)
式中LEN(LTRIM(RTRIM(EpfNo))4;

为什么会有子查询?当EPFNo达到一定长度时,看起来您正在填充它。你不能使用更简单的
更新tblEmployee SET EPFNo=RIGHT('0000'+CAST(EPFNo AS VARCHAR(4)),其中LEN(EPFNo)=4
?注意..,谢谢Paresh J&Andy Nichols