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
)
È stato utile?

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
...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top