SQL更新语句上的语法错误

时间:2009-09-10 20:13:50

标签: sql sql-server tsql sql-server-2005 sql-update

如何更正以下内容,以便在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
)

6 个答案:

答案 0 :(得分: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
                )

答案 1 :(得分: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)

答案 2 :(得分:0)

自从我尝试了这种语法以来已经有一段时间......但在SQL Server中,您可以在更新时指定from。

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 e1 SET 
...
FROM Emp e1
...

答案 3 :(得分: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

答案 4 :(得分:0)

如果我理解正确,这就是你要做的。虽然,我不确定WHERE子句的第一部分是否真的有必要,除非有大量的行......

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

答案 5 :(得分:0)

更新Emp SET UserName = Left(FirstName,1)+ LastName 什么地方没有(    选择 *    来自Emp e    WHERE.UserName = Left(emp.FirstName,1)+ emp.LastName )