سؤال

وكيف يمكنني تصحيح التالية بحيث لا يحصل على خطأ لغوي في 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

وUPDATE زقة SET اسم المستخدم = اليسار (الاسم الأول، 1) + اسم العائلة WHERE NOT EXISTS (    تحديد *    من زقة ه    أين e.UserName = اليسار (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 e1 SET 
...
FROM Emp e1
...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top