SQL 更新语句的语法错误

Posted

技术标签:

【中文标题】SQL 更新语句的语法错误【英文标题】:Syntax error on SQL update statement 【发布时间】:2009-09-10 20:13:49 【问题描述】:

如何更正以下问题,以免在 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
)

【问题讨论】:

我不太确定这有什么问题,但相关的子查询往往非常慢。 我过去曾这样做过,但我似乎记得与以下答案中描述的技术相关的代码异味。 【参考方案1】:

要给名称起别名,您必须使用 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)

或者给子查询起别名:

UPDATE Emp 
SET UserName = Left(FirstName,1)+LastName
WHERE NOT EXISTS(   
  SELECT * FROM Emp E    
  WHERE E.UserName=Left(Emp.FirstName,1)+Emp.LastName)

【讨论】:

第一个例子成功了!是的! 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) 我将在第一个示例中使用别名 E,Update E 而不是 Update Emp 这可以防止您只突出显示前两行并意外更新整个表格。 @hlgem:一次被咬两次害羞? :)【参考方案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
                )

【讨论】:

【参考方案3】:

这里有两种语法。要使用别名作为更新目标,请执行以下操作:

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】:

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

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

【讨论】:

【参考方案5】:

更新 Emp SET UserName = Left(FirstName,1)+LastName 不存在的地方( 选择 * 来自雇主 其中 e.UserName=Left(emp.FirstName,1)+emp.LastName )

【讨论】:

【参考方案6】:

我已经有一段时间没有尝试过这种语法了……但在 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
...

【讨论】:

以上是关于SQL 更新语句的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

更新时更新语句中的语法错误

错误:您的 SQL 语法有错误 - 但 SQL 语句有效

在 sql 语法中出现错误,vb.net 中的 mysql update 语句

INSERT INTO 语句的语法错误

ogr执行sql语句,sql中有中文时包语法错误

oracle如何检查sql语法错误