none
Generar codigo Alfanumerico

    Pregunta

  • Saludos mi pregunta es la siguiente :

    Como puedo generar codigos alfanumericos de esta manera A001, y cuando llame de mi aplicacion dandole click me valla generando el proximo que sigue en este caso A002 como seria el store procedure en este caso ??

    Saludos


    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Me ha servido como ayuda"

    martes, 04 de septiembre de 2012 16:05

Respuestas

  • Hola,

    Amigo si estas utilizando Sql Server 2012 puedes utilizar secuencias, si no tienes Sql Server 2012 puede de un identity en la tabla.

    Ejemplo en Sql Server 2012

    link referencia secuencias:http://msdn.microsoft.com/en-us/library/ff878091.aspx

    --Creando la secuencia en base de datos
    CREATE SEQUENCE Contador
        START WITH 1
        INCREMENT BY 1 ;
    
    
    --Utilizando tabla de ejemplo para usar secuencia
    DECLARE @tblPrueba TABLE (codigo char(5));
    --insertar el valor
    INSERT INTO @tblPrueba (codigo) 
    values
    (  'A' +   right(('00' +Convert(varchar(4),(NEXT VALUE FOR Contador))),3)),
    (  'A' +   right(('00' +Convert(varchar(4),(NEXT VALUE FOR Contador))),3)),
    (  'A' +   right(('00' +Convert(varchar(4),(NEXT VALUE FOR Contador))),3)),
    (  'A' +   right(('00' +Convert(varchar(4),(NEXT VALUE FOR Contador))),3));
    --viendo el resultado
    SELECT * FROM @tblPrueba;


    Si no tienes Sql Server 2012, auxiliate de un identity como mencionan en las respuestas anteriores.

    --Define tu tabla con identity que llevara el correlativo del registro
    --ahora define un campo que sea el resultado de un calculo en base a tu ID, eso quiere decir que lo vamos a crear
    DECLARE @tblPrueba TABLE (id smallint identity,
    codigo as (  'A' +   right(('00' +Convert(varchar(5),id)),3)),
    texto varchar(50));
    
    --insertar valores de prueba
    
    
    INSERT INTO @tblPrueba (texto) 
    values
    ('Hola mundo codigo generado 1'),
    ('Hola mundo codigo generado 2'),
    ('Hola mundo codigo generado 3'),
    ('Hola mundo codigo generado 4');
    --viendo el resultado
    SELECT * FROM @tblPrueba;

    Tabiem puede generar el codigo en el query en base al indentity.

    Muchas suerte amigo, si necesitas ayuda con el tema puede preguntar


    Ahias Portillo

    • Marcado como respuesta J. Joaquin viernes, 07 de septiembre de 2012 16:24
    jueves, 06 de septiembre de 2012 2:35
  • Hola.

    Sustituye "Estudiantes" por "@Estudiantes"


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

    • Marcado como respuesta J. Joaquin jueves, 06 de septiembre de 2012 19:49
    jueves, 06 de septiembre de 2012 19:16

Todas las respuestas

  • Te recomiendo este artículo de Paul White: "Sequence tables"

    martes, 04 de septiembre de 2012 16:27
  • Hola.

    Puedes apoyarte en un identity y generar un campo calculado a partir de él o puedes preparar un contador del modo en que aquí expongo:

    http://qwalgrande.blogspot.es/1271102040/obtencion-de-contador-sin-identity/

    El procedimiento es similar, obtener un identificador único y secuencial y luego acoplarle la semilla.

    Si no consigues realizarlo, nos dices.


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

    martes, 04 de septiembre de 2012 16:28
  • Gracias por el documento que me enviaro los 2 pero la verdad no entiendo mucho , No soy muy experto en sql le explicare mejor a ver si pueden de esta maera pues ayudarme mejor, Tengo una base de datos llamada Sistema_Escolar en ella tengo una tabla llamada Estudiante y en la tabla estudiante tengo un campo llamado Codigo declarado varchar, en ese codigo quiero que se guarde el que genere en el Store Procedure , alguien que me ilustre con otro ejemplo por fa.


    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Me ha servido como ayuda"

    martes, 04 de septiembre de 2012 17:25
  • Te explicaste perfectamente la primera vez, las respuestas de Alberto y mía te indican cómo generar un proceso que devuelva un identificador secuencial basado en una cadena de caracteres. Si lo que quisieras fuera una secuencia numérica podrías usar IDENTITY, pero no es el caso, así que lo mejor que puedes hacer es leerte esos artículos y crear el proceso.

    ¿Qué es lo que no entiendes de esos artículos? Ambos exponen código que retocándolo mínimamente (el algoritmo para definir el valor siguiente) te sirve en tu escenario

    miércoles, 05 de septiembre de 2012 7:43
  • Hola,

    Amigo si estas utilizando Sql Server 2012 puedes utilizar secuencias, si no tienes Sql Server 2012 puede de un identity en la tabla.

    Ejemplo en Sql Server 2012

    link referencia secuencias:http://msdn.microsoft.com/en-us/library/ff878091.aspx

    --Creando la secuencia en base de datos
    CREATE SEQUENCE Contador
        START WITH 1
        INCREMENT BY 1 ;
    
    
    --Utilizando tabla de ejemplo para usar secuencia
    DECLARE @tblPrueba TABLE (codigo char(5));
    --insertar el valor
    INSERT INTO @tblPrueba (codigo) 
    values
    (  'A' +   right(('00' +Convert(varchar(4),(NEXT VALUE FOR Contador))),3)),
    (  'A' +   right(('00' +Convert(varchar(4),(NEXT VALUE FOR Contador))),3)),
    (  'A' +   right(('00' +Convert(varchar(4),(NEXT VALUE FOR Contador))),3)),
    (  'A' +   right(('00' +Convert(varchar(4),(NEXT VALUE FOR Contador))),3));
    --viendo el resultado
    SELECT * FROM @tblPrueba;


    Si no tienes Sql Server 2012, auxiliate de un identity como mencionan en las respuestas anteriores.

    --Define tu tabla con identity que llevara el correlativo del registro
    --ahora define un campo que sea el resultado de un calculo en base a tu ID, eso quiere decir que lo vamos a crear
    DECLARE @tblPrueba TABLE (id smallint identity,
    codigo as (  'A' +   right(('00' +Convert(varchar(5),id)),3)),
    texto varchar(50));
    
    --insertar valores de prueba
    
    
    INSERT INTO @tblPrueba (texto) 
    values
    ('Hola mundo codigo generado 1'),
    ('Hola mundo codigo generado 2'),
    ('Hola mundo codigo generado 3'),
    ('Hola mundo codigo generado 4');
    --viendo el resultado
    SELECT * FROM @tblPrueba;

    Tabiem puede generar el codigo en el query en base al indentity.

    Muchas suerte amigo, si necesitas ayuda con el tema puede preguntar


    Ahias Portillo

    • Marcado como respuesta J. Joaquin viernes, 07 de septiembre de 2012 16:24
    jueves, 06 de septiembre de 2012 2:35
  • Hey hermano gracias por el codigo intente hacer una prueba pero aun me da un error este es mi codigo

    declare Estudiantes TABLE(idEstudiantes smallint identity,
    Matriculas as ('A' + right(('00' + convert(varchar(5),idEstudiantes)),3)),
    Nombres varchar (70));

    INSERT INTO Estudiantes (Nombres)
    VALUES
    ('Hola mundo codigo generado 1'),
    ('Hola mundo codigo generado 2'),
    ('Hola mundo codigo generado 3'),
    ('Hola mundo codigo generado 4');

    y mi esta dando este error me dice que es en TABLE , aqui te muestro el error a ver si me puedes ayudar:

    Msg 156, Level 15, State 1, Line 1
    Incorrect syntax near the keyword 'TABLE'


    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Me ha servido como ayuda"

    jueves, 06 de septiembre de 2012 17:28
  • Hola.

    Sustituye "Estudiantes" por "@Estudiantes"


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

    • Marcado como respuesta J. Joaquin jueves, 06 de septiembre de 2012 19:49
    jueves, 06 de septiembre de 2012 19:16
  • Qwalgrande he hecho lo que usted me dijo y me compilo bien, pero ahora el problema esta que no me inserta la matricula, solo me inserta el nombre que introduje

    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Me ha servido como ayuda"

    jueves, 06 de septiembre de 2012 19:49
  • Hola.

    He probado tu mismo código y sí que inserta la matrícula. ¿Puedes poner una captura de pantalla con la ejecución y el resultado que obtienes haciendo un "select * from @Estudiantes"?


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

    viernes, 07 de septiembre de 2012 5:30
  • SELECT * FROM @Estudiantes

    Qwalgrande si me compila bien pero cuando voy a ver el resultado de la tabla pues me da este errror

    Msg 1087, Level 15, State 2, Line 1
    Must declare the table variable "@Estudiantes".

    ????????/


    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Me ha servido como ayuda"

    viernes, 07 de septiembre de 2012 16:33
  • Hola.

    A ver, has de ejecutarlo todo junto, desde el "declare @estudiantes Tabla..." hasta el "Select * from @Estudiantes". Recuerda que es una variable.


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

    viernes, 07 de septiembre de 2012 18:13
  • Qwalgrande si me compila bien el problema esta solo cuando intento ver el resultado insertado con la sentencia

    SELECT * FROM @Estudiantes

    que me da el error antes puesto nose si estoy haciendo algo mal, dime una cosa debo de crear una tabla con algunos datos de los que estan ahi o directamente el store procedure me crea todo??


    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Me ha servido como ayuda"

    viernes, 07 de septiembre de 2012 18:43