Синтаксическая ошибка в операторе обновления SQL
-
05-07-2019 - |
Вопрос
Как я могу исправить следующее, чтобы не получать синтаксическую ошибку в 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
)
Решение
Для псевдонима вы должны использовать 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 E
SET UserName = Left(FirstName,1)+LastName
FROM Emp E
WHERE NOT EXISTS(
SELECT * FROM Emp
WHERE UserName=Left(E.FirstName,1)+E.LastName
)
здесь есть 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
Если я правильно понимаю, это то, что вы пытаетесь сделать. Хотя я не уверен, что первая часть предложения WHERE действительно необходима, если нет тонны строк ...
UPDATE Emp
SET UserName = Left(FirstName,1)+LastName
WHERE UserName<>Left(FirstName,1)+LastName
AND EmpID=1
ОБНОВЛЕНИЕ Emp SET UserName = Left (FirstName, 1) + LastName ГДЕ НЕ СУЩЕСТВУЕТ ( ВЫБРАТЬ * ОТ Emp e ГДЕ e.UserName = Left (emp.FirstName, 1) + emp.LastName ) Р>
Прошло много времени с тех пор, как я попробовал этот синтаксис ... но в 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
...