Errore di sintassi sull'istruzione di aggiornamento SQL
-
05-07-2019 - |
Domanda
Come posso correggere quanto segue in modo da non ricevere un errore di sintassi in 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
)
Soluzione
Per alias il nome devi usare 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 sottoquery:
UPDATE Emp
SET UserName = Left(FirstName,1)+LastName
WHERE NOT EXISTS(
SELECT * FROM Emp E
WHERE E.UserName=Left(Emp.FirstName,1)+Emp.LastName)
Altri suggerimenti
Non testato ...
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
)
ci sono 2 sintassi qui. Per utilizzare un alias come destinazione dell'aggiornamento, procedi come segue:
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 sto capendo correttamente, questo è quello che stai cercando di fare. Tuttavia, non sono sicuro che la prima parte della clausola WHERE sia davvero necessaria a meno che non ci siano tonnellate di righe ...
UPDATE Emp
SET UserName = Left(FirstName,1)+LastName
WHERE UserName<>Left(FirstName,1)+LastName
AND EmpID=1
AGGIORNAMENTO Emp SET UserName = Left (FirstName, 1) + LastName DOVE NON ESISTE ( SELEZIONA * DA Emp e WHERE e.UserName = Left (emp.FirstName, 1) + emp.LastName )
È passato un po 'di tempo da quando ho provato questa sintassi ... ma in SQL Server è possibile specificare un da su un aggiornamento.
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
)
MODIFICA : la mia sintassi sicuramente funziona ma non sono sicuro che sia corretto. Indipendentemente dal fatto che sia giusto, suggerirei di utilizzare l'alias nella dichiarazione di aggiornamento solo per garantire che gli altri possano capire meglio cosa stai facendo.
UPDATE e1 SET
...
FROM Emp e1
...