Erreur de syntaxe sur l'instruction de mise à jour SQL
-
05-07-2019 - |
Question
Comment puis-je corriger les éléments suivants afin de ne pas recevoir d'erreur de syntaxe dans 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
)
La solution
Pour aliaser le nom que vous devez utiliser 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 la sous-requête:
UPDATE Emp
SET UserName = Left(FirstName,1)+LastName
WHERE NOT EXISTS(
SELECT * FROM Emp E
WHERE E.UserName=Left(Emp.FirstName,1)+Emp.LastName)
Autres conseils
Non testé ...
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
)
il y a 2 syntaxes ici. Pour utiliser un alias comme cible de la mise à jour, procédez comme suit:
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
Si je comprends bien, voici ce que vous essayez de faire. Bien que je ne sois pas sûr que la première partie de la clause WHERE soit vraiment nécessaire à moins d’une tonne de lignes ...
UPDATE Emp
SET UserName = Left(FirstName,1)+LastName
WHERE UserName<>Left(FirstName,1)+LastName
AND EmpID=1
UPDATE Emp SET UserName = Left (Prénom, 1) + Nom OU N'EXISTE PAS ( SELECT * DEPUIS Emp e WHERE e.UserName = Left (emp.Nom, 1) + emp.Nom )
Cela fait un moment que je n'ai pas essayé cette syntaxe ... mais dans SQL Server, vous pouvez spécifier un à partir d'une mise à jour.
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
)
MODIFIER : ma syntaxe est certainement valable, mais je ne suis pas certaine qu'elle soit correcte. Que ce soit correct ou non, je suggérerais d'utiliser l'alias de la déclaration de mise à jour simplement pour que les autres puissent mieux comprendre ce que vous faites.
UPDATE e1 SET
...
FROM Emp e1
...