Pregunta

Oh, gran Stackoverflow, te suplico ... Necesito hacer lo siguiente:

CREAR UN ÍNDICE ÚNICO UserName ON Emp (UserName) - Sheesh!

UPDATE Emp SET
UserName = Left(FirstName,1)+LastName

DONDE NO existe un empleado con ese Nombre de usuario ya.

¿Fue útil?

Solución

Esto todavía permitirá duplicados ... pero si quieres lo que dijiste,   Prueba esto (exactamente lo que dijiste):

UPDATE Emp SET
   UserName = Left(FirstName,1) + LastName
Where Not Exists (Select * From Emp 
                  Where UserName = Left(FirstName,1) + LastName)

Sin embargo, supongo que está intentando evitar duplicados, no solo restablecer los nombres de usuario donde ninguno existente es el mismo que el nuevo valor propuesto. Si es así, debe agregar un índice único en la columna userName, pero primero, ejecute esto:

UPDATE Emp SET
   UserName = Left(FirstName,1) + LastName
Where  Not Exists 
             (Select * From Emp 
              Where UserName = Left(FirstName,1) + LastName)
    And Not Exists 
             (Select * From Emp 
              Group By Left(FirstName,1) + LastName
              Having Count(*) > 1)

Esto restablecerá todos los nombres de usuario que PUEDEN restablecerse sin crear duplicados. (No eliminará los duplicados existentes). Si no hay duplicados después de esto, puede aplicar el índice.

Otros consejos

Yo pondría un índice único en nombre de usuario y uso:

UPDATE IGNORE Emp SET UserName = Left(FirstName,1)+LastName

Si su base de datos lo admite;)

Sí, en caso de que no lea más abajo el nombre de usuario realmente debería ser Único, también me aseguraría de que haya algo más en la cláusula where porque será una consulta intensa.

Puede considerar escribir una función para hacer esto y agregar alguna otra singularidad o identificación al final si existe (Cuenta (*) donde nombre de usuario como nombre de usuario).

UPDATE Emp SET
UserName = Left(FirstName,1)+LastName
WHERE
UserName not in (Select UserName From Emp Where UserName = Left(FirstName,1) + LastName)

En primer lugar, el campo de nombre de usuario debe tener un índice único. Si no lo hace, entonces sus datos corren el riesgo de que alguien actualice sin usar su pequeña declaración de actualización. Las sugerencias de códigos actuales no le dan un ejemplo de cómo manejar la configuración del nombre de usuario si se usa el existente, ¿qué desea hacer? Esto debería ser parte de su proceso. El usuario necesita un nombre de usuario.

solo para mostrar aquí es una forma de manejar el incremento del nombre de usuario hasta que obtengas uno que no existe. Este ejemplo es una inserción, no una actualización, pero creo que puede usarlo como punto de partida. Al usar este método (y esto es para un registro a la vez que se insertan), nadie ingresa al sistema con un nombre de usuario duplicado y no se producen errores si existe una coincidencia exacta, solo se mueve para encontrar la siguiente. / p>

CREATE PROC [dbo].[ins_MyUserTable]
(
@userID int,
@Login varchar(255)
)

As

DECLARE 

@ValidateUserName varchar(50),
@NewUserName varchar(50),
@CheckUserName varchar(50),
@Holding int

-- Get User Name (first letter of first name + last name)
SELECT @NewUserName = @Login
SET @Holding = 0

-- Examine User Name (must be unique)
SELECT @ValidateUserName = 1

WHILE @ValidateUserName = 1
  BEGIN
    -- Check for Login
    SELECT @CheckUserName = (SELECT TOP 1 login FROM MyUserTable WHERE login = @NewUserName)

    IF @CheckUserName = @NewUserName
      BEGIN
                    SELECT @Holding = @Holding + 1
        SELECT @NewUserName = @Login + Convert(varchar(2), @Holding)
      END
    ELSE
      BEGIN
        SELECT @ValidateUserName = 0
      END
  END
    -- Insert  into MyUserTable 
    INSERT INTO MyUserTable
      ([user_id], login)
    VALUES
      (@userID, @NewUserName) 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top