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 更新语句的语法错误的主要内容,如果未能解决你的问题,请参考以下文章