質問

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から    WHERE e.UserName = Left(emp.FirstName、1)+ emp.LastName )

この構文を試してからしばらく経ちましたが、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ステートメントでエイリアスを使用することをお勧めします。

UPDATE e1 SET 
...
FROM Emp e1
...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top