Вопрос

Как я могу исправить следующее, чтобы не получать синтаксическую ошибку в 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
...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top