2009-09-10 173 views
0

如何更正以下內容,以便在Microsoft SQL Server 2005中不會收到語法錯誤?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

我不完全知道什麼是錯,但相關子查詢往往*非常*慢。 – Powerlord 2009-09-10 20:17:32

+0

我已經完成了這個過程,但是我似乎想起了與下面答案中描述的技術相關的代碼氣味。 – Mayo 2009-09-10 20:20:57

回答

1

別名,你必須使用從名字:

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) 

或別名子查詢:

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

第一個例子工作!是啊! UPDATE的Emp 設置用戶名=左(名字,1)+姓氏 FROM EMPË WHERE NOT EXISTS( SELECT * FROM EMP 其中username =左(E.FirstName,1)+ E.LastName) – 2009-09-10 20:27:37

+0

而你的第二個例子也工作了!是啊! – 2009-09-10 20:30:32

+1

我會在第一個示例中使用別名E,更新E而不是更新Emp 這會阻止您僅突出顯示前兩行並偶然更新整個表。 – HLGEM 2009-09-10 21:39:45

1

未經測試...

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

是啊!這個也工作了! – 2009-09-10 20:29:14

0

這已經有一段時間,因爲我已經試過這句法......但在SQL Server中,你可以從一個更新的指定。

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 
) 

編輯:我的語法肯定運行,但我不能肯定它是正確的。無論是否正確,我都建議在update語句中使用別名,以確保其他人可以更好地理解您在做什麼。

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

有2個語法在這裏。要使用別名作爲更新目標,請執行以下操作:

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

如果我的理解正確,這就是您要做的。雖然,我不知道的WHERE子句是真的有必要,除非有一噸行的第一部分...

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

UPDATE的Emp 設置用戶名=左(名字,1)+姓氏 WHERE NOT EXISTS( SELECT * FROM Ë的Emp WHERE = e.UserName左(emp.FirstName,1)+ emp.LastName )