2009-09-10 10 views
0

Comment puis-je corriger ce qui suit afin de ne pas recevoir d'erreur de syntaxe dans Microsoft SQL Server 2005?Erreur de syntaxe sur l'instruction de mise à jour SQL

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 
) 
+0

Je ne suis pas sûr de ce qui ne va pas avec cela, mais les sous-requêtes dépendantes ont tendance à être * excessivement * lent. – Powerlord

+0

Je l'ai fait par le passé, mais je crois me souvenir d'une odeur de code associée aux techniques décrites dans les réponses ci-dessous. – Mayo

Répondre

1

Pour un alias le nom que vous devez utiliser à partir de:

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) 
+0

Le premier exemple a fonctionné! Ouais! MISE À JOUR Emp SET UserName = Gauche (FirstName, 1) + LastName DE Emp E EXISTE PAS OU ( SELECT * FROM Emp OÙ UserName = Gauche (E.FirstName, 1) + E.LastName) –

+0

Et votre deuxième exemple travaillé, aussi! Ouais! –

+1

J'utiliserais l'alias E dans le premier exemple, Mise à jour E au lieu de Mise à jour Emp Cela vous empêche de ne mettre en évidence que les deux premières lignes et de mettre à jour la table entière par accident. – HLGEM

1

... Untested

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 
       ) 
+0

Ouais! Celui-ci a travaillé aussi! –

0

Il a été un moment que je l'ai essayé cette syntaxe ... mais dans SQL Server, vous pouvez spécifier une mise à jour à partir sur une.

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: Ma syntaxe fonctionne certes, mais je ne suis pas certain que c'est exact. Peu importe si oui ou non, je suggère d'utiliser l'alias dans l'instruction update juste pour s'assurer que les autres puissent mieux comprendre ce que vous faites.

UPDATE e1 SET 
... 
FROM Emp e1 
... 
0

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 
0

Si je comprends bien, c'est ce que vous essayez de faire. Bien, je ne suis pas sûr de la première partie de la clause WHERE est vraiment nécessaire, à moins qu'il ya une tonne de lignes ...

UPDATE Emp 
SET UserName = Left(FirstName,1)+LastName 
WHERE UserName<>Left(FirstName,1)+LastName 
AND EmpID=1 
0

MISE À JOUR Emp SET UserName = Gauche (FirstName, 1) + LastName OU PAS EXISTE ( SELECT * FROM emp e OÙ e.UserName = gauche (emp.FirstName, 1) + emp.LastName )

Questions connexes