Erro de sintaxe na instrução SQL update
-
05-07-2019 - |
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
)
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
...