Pergunta

Como posso corrigir o seguinte para que eu não receber um erro de sintaxe no Microsoft SQL Server 2005?

UPDATE Emp E
SET UserName = Left(FirstName,1)+LastName
WHERE EmpID=1
AND NOT EXISTS(
   SELECT * FROM Emp 
   WHERE UserName=Left(E.FirstName,1)+E.LastName
)
Foi útil?

Solução

Para o alias do nome que você deve usar FROM:

UPDATE Emp 
SET UserName = Left(FirstName,1)+LastName
FROM Emp E
WHERE NOT EXISTS(   
  SELECT * FROM Emp    
  WHERE UserName=Left(E.FirstName,1)+E.LastName)

Ou alias sub-consulta:

UPDATE Emp 
SET UserName = Left(FirstName,1)+LastName
WHERE NOT EXISTS(   
  SELECT * FROM Emp E    
  WHERE E.UserName=Left(Emp.FirstName,1)+Emp.LastName)

Outras dicas

Não experimentado ...

UPDATE E
SET UserName = Left(FirstName,1)+LastName
FROM Emp E
WHERE NOT EXISTS(   
                 SELECT * FROM Emp    
                 WHERE UserName=Left(E.FirstName,1)+E.LastName
                )

existem 2 sintaxes aqui. Para usar um alias como o alvo da atualização que você faça o seguinte:

UPDATE e
    SET UserName = Left(FirstName,1)+LastName
    FROM Emp e
    WHERE NOT EXISTS(
       SELECT * FROM Emp
       WHERE UserName=Left(E.FirstName,1)+E.LastName
    )
    AND EmpID=1

Se eu estou entendendo corretamente, isso é o que você está tentando fazer. Embora, eu não tenho certeza que a primeira parte da cláusula WHERE é realmente necessário a menos que haja uma tonelada de linhas ...

UPDATE Emp
SET UserName = Left(FirstName,1)+LastName
WHERE UserName<>Left(FirstName,1)+LastName
AND EmpID=1

Atualização Emp Nome de utilizador definido = Esquerdo (nome, 1) + sobrenome ONDE NÃO EXISTE ( SELECT * De emp e ONDE e.UserName = Esquerdo (emp.FirstName, 1) + emp.LastName )

Tem sido um tempo desde que eu tentei esta sintaxe ... mas no SQL Server você pode especificar um do em uma atualização.

UPDATE Emp SET 
   UserName = Left(FirstName,1)+LastName
FROM Emp e1
WHERE NOT EXISTS (
   SELECT * 
   FROM Emp e2
   WHERE e2.UserName=Left(e1.FirstName,1)+e1.LastName
)

Editar : Minha sintaxe certamente funciona, mas não estou certo de que ele está correto. Independentemente de saber se é ou não é certo, eu sugiro usar o alias na instrução de atualização apenas para garantir que outros possam entender melhor o que você está fazendo.

UPDATE e1 SET 
...
FROM Emp e1
...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top