Error de sintaxis en el estado de actualización de SQL
-
05-07-2019 - |
Pregunta
¿Cómo puedo corregir lo siguiente para no recibir un error de sintaxis en 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
)
Solución
Para alias el nombre que debe 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)
O alias la subconsulta:
UPDATE Emp
SET UserName = Left(FirstName,1)+LastName
WHERE NOT EXISTS(
SELECT * FROM Emp E
WHERE E.UserName=Left(Emp.FirstName,1)+Emp.LastName)
Otros consejos
Sin probar ...
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
)
hay 2 sintaxis aquí. Para usar un alias como destino de la actualización, haga lo siguiente:
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 estoy entendiendo correctamente, esto es lo que estás tratando de hacer. Sin embargo, no estoy seguro de que la primera parte de la cláusula WHERE sea realmente necesaria a menos que haya un montón de filas ...
UPDATE Emp
SET UserName = Left(FirstName,1)+LastName
WHERE UserName<>Left(FirstName,1)+LastName
AND EmpID=1
ACTUALIZAR Emp SET UserName = Left (FirstName, 1) + LastName DONDE NO EXISTE ( SELECCIONAR * De emp e WHERE e.UserName = Left (emp.FirstName, 1) + emp.LastName )
Ha pasado un tiempo desde que probé esta sintaxis ... pero en SQL Server puede especificar una actualización.
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
)
EDIT : mi sintaxis ciertamente se ejecuta pero no estoy seguro de que sea correcta. Independientemente de si es correcto o no, sugeriría usar el alias en la declaración de actualización solo para asegurar que otros puedan comprender mejor lo que está haciendo.
UPDATE e1 SET
...
FROM Emp e1
...