Синтаксическая ошибка в операторе обновления SQL - PullRequest
0 голосов
/ 11 сентября 2009

Как я могу исправить следующее, чтобы я не получил синтаксическую ошибку в 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 ]

1 голос
/ 11 сентября 2009

Для псевдонима необходимо использовать ОТ:

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)
1 голос
/ 11 сентября 2009

Не проверено ...

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
                )
0 голосов
/ 11 сентября 2009

ОБНОВЛЕНИЕ Emp SET UserName = Left (FirstName, 1) + LastName ГДЕ НЕ СУЩЕСТВУЕТ ( ВЫБРАТЬ * ОТ Emp e ГДЕ e.UserName = Left (emp.FirstName, 1) + emp.LastName )

0 голосов
/ 11 сентября 2009

Если я правильно понимаю, это то, что вы пытаетесь сделать. Хотя я не уверен, что первая часть предложения WHERE действительно необходима, если нет тонны строк ...

UPDATE Emp
SET UserName = Left(FirstName,1)+LastName
WHERE UserName<>Left(FirstName,1)+LastName
AND EmpID=1
0 голосов
/ 11 сентября 2009

здесь есть 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
0 голосов
/ 11 сентября 2009

Прошло много времени с тех пор, как я попробовал этот синтаксис ... но в 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 e1 SET 
...
FROM Emp e1
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...