none
Autogenerado

    Pregunta

  • ojala nadie se moleste por esta pregunta ....

    alguien me puede decir como crear un procedimiento almacenado para generar un id con los apellidos nombres y fecha
    ejemplo: ERICK VEGA TOLEDO el codigo (id) seria ERVETO160808, gracias nuevamente
    sábado, 16 de agosto de 2008 20:26

Respuestas

  • Aun cuando podría hacerse con una función de ese estilo, se puede conseguir también con un campo calculado:

     

    alter table MiTabla add Identificador as
    (
    left(Nombre,2) + left(Apellido1,2) + left(Apellido2,2) + 
    cast(datepart(dd, Fecha) as varchar(2)) +
    cast(datepart(MM, Fecha) as varchar(2)) +
    cast(datepart(yy,Fecha) as varchar(2))
    )
    

    Si va a ser un identificador, usar la cláusala "persisted" sería bastante oportuno, ya que es de esperar que existan búsquedas sobre ese campo, que precisarán índices sobre la misma.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 14 de agosto de 2011 14:43
    Moderador

Todas las respuestas

  • Creo que lo mejor en este caso es crear una scalar function que te devuelva el valor directamente pasándole los 4 parámetros. Quedaría algo así:

     

    create function Encode

    (

    @nombre varchar(50),

    @apellido1 varchar(50),

    @apellido2 varchar(50),

    @fecha smalldatetime

    )

    returns char(12)

    begin

    declare @strDate as char(8)

    set @strDate = convert(char(8), @fecha, 112)

    return substring(@nombre, 1, 2) + substring(@apellido1, 1, 2) + substring(@apellido2, 1, 2) + substring(@strDate, 5, 2) + substring(@strDate, 3, 2) + substring(@strDate, 1, 2)

    end

     

    Espero haberte ayudado.

     

    Samuel

    lunes, 18 de agosto de 2008 8:29
  • Aun cuando podría hacerse con una función de ese estilo, se puede conseguir también con un campo calculado:

     

    alter table MiTabla add Identificador as
    (
    left(Nombre,2) + left(Apellido1,2) + left(Apellido2,2) + 
    cast(datepart(dd, Fecha) as varchar(2)) +
    cast(datepart(MM, Fecha) as varchar(2)) +
    cast(datepart(yy,Fecha) as varchar(2))
    )
    

    Si va a ser un identificador, usar la cláusala "persisted" sería bastante oportuno, ya que es de esperar que existan búsquedas sobre ese campo, que precisarán índices sobre la misma.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 14 de agosto de 2011 14:43
    Moderador
  • SAmuel, especial cuidado con las funciones escalares, aún cuando parecen inofensivas, se ejecutan fila a fila, y por tanto, devolver 4 millones de filas, supondrá ejecutar 4 millones de veces esa función. Sin embargo , si como propone alberto se crea un campo calculado y se genera un índice.... el rendimiento es muchísimo mejor, en varios órdenes de magnitud.
    Comparte lo que sepas, aprende lo que no sepas (FGG) http://www.portalsql.com
    domingo, 14 de agosto de 2011 15:23
    Moderador