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