none
código con letra y numero consecutivo RRS feed

  • Pregunta

  • Hola a todos! tengo esta inquietud espero que alguién pueda ayudarme y desde ya gracias por el apoyo.

    Tengo una Tabla "Vendedor"

    Los campos Vendedor son: idVendedor, nomVendedor, apelVendedor, telefono, sexo
    Lo que quiero hacer es asignar una letra al idVendedor con la letra "V" y seguido de numero que se vaya incrementando consecutivamente y quede de la siguiente manera Por ejemplo: V001,v002,V003.......
    Y mi otra consulta es que también en el sexo solo me permita ingresar F o M

    Espero que alguién me pueda ayudar.
    Saludos a todos y desde ya muchas gracias

    martes, 7 de noviembre de 2017 18:58

Respuestas

  • "grandioso, solo que al momento de poner llave primaria no puede quedar el codigodeVendedor o como podria hacer ???"

    De poder se puede pero no sería lo mas recomendable , lo mas recomendable sería que utilizes números enteros como tu llave primaria , como es el caso de la columna identity

    asi podrías crear la llave que deseas

    Create Table #Vendedor
    ( 
    iCorrelativo Int Identity(1,1),
    iCodigoVendedor As 'V'+RIGHT('000'+RTRIM(iCorrelativo) ,3)PERSISTED NOT NULL ,
    vNombreVendedor Varchar(100)
    )
    
    Insert Into #Vendedor Values('Vendedor 1')
    Insert Into #Vendedor Values('Vendedor 2')
    Insert Into #Vendedor Values('Vendedor 3')
    Insert Into #Vendedor Values('Vendedor 4')
    Insert Into #Vendedor Values('Vendedor 5')
    Insert Into #Vendedor Values('Vendedor 6')
    Alter Table #Vendedor add primary key (iCodigoVendedor)
       
    Select * From #Vendedor
    Drop Table #Vendedor
    
    


    Votar es agradecer.
    Saludos.
    Lima-Perú

    miércoles, 8 de noviembre de 2017 16:04

Todas las respuestas

  • Lo de F o M es fácil: basta con añadir en la definición de la tabla detrás de la columna correspondiente una restricción de tipo CHECK:

    ... sexo char(1) not null check (sexo in ('F', 'M')), ...

    Lo del idVendedor no se puede hacer directamente en la tabla salvo que uses un campo identity para que genere el id, y luego un campo calculado que concatene la V y formatee el id con ceros para sacar el idVendedor como lo quieres. Pero si no es aceptable esta solución del doble campo, entonces tienes que recurrir a generar el id que deseas desde el código que accede a la tabla. Hay varias formas de hacerlo: podría ser en el código cliente, que lo calcule antes de enviar el Insert a Sql server. Podría ser en un procedimiento almacenado, y forzar a todos los programas cliente a que graben siempre a través del procedimiento almacenado, sin tener permiso de escritura directa sobre la tabla. O podría ser con un trigger INSTEAD OF. El usar una u otra opción dependerá de tus circunstancias y cómo accedas a la tabla. En todos los casos, habrá que iniciar transacción, buscar el último valor, sumarle 1, rellenarlo con ceros y concatenarlo a la V, después salvar y hacer el commit de la transacción. Si no te sale, dinos cuál de las cuatro opciones has elegido y te ponemos un ejemplo de cómo implementar esa opción.


    martes, 7 de noviembre de 2017 19:37
  • Hola, para el código del vendedor podrías utilizar un campo calculado que te han sugerido el cual concatenarías con el campo identity 

    Create Table #Vendedor
    ( 
    iCorrelativo Int Identity(1,1),
    iCodigoVendedor As 'V'+RIGHT('000'+RTRIM(iCorrelativo)  ,3),
    vNombreVendedor Varchar(100)
    )
    
    Insert Into #Vendedor Values('Vendedor 1')
    Insert Into #Vendedor Values('Vendedor 2')
    Insert Into #Vendedor Values('Vendedor 3')
    Insert Into #Vendedor Values('Vendedor 4')
    Insert Into #Vendedor Values('Vendedor 5')
    Insert Into #Vendedor Values('Vendedor 6')
    
       
    Select * From #Vendedor
    Drop Table #Vendedor


    Votar es agradecer.
    Saludos.
    Lima-Perú


    • Editado Augusto1982 martes, 7 de noviembre de 2017 21:30
    martes, 7 de noviembre de 2017 21:28
  • muchas gracias por los consejos me ayudo bastante con el check

    miércoles, 8 de noviembre de 2017 14:57
  • grandioso, solo que al momento de poner llave primaria no puede quedar el codigodeVendedor o como podria hacer ???
    miércoles, 8 de noviembre de 2017 15:00
  • "grandioso, solo que al momento de poner llave primaria no puede quedar el codigodeVendedor o como podria hacer ???"

    De poder se puede pero no sería lo mas recomendable , lo mas recomendable sería que utilizes números enteros como tu llave primaria , como es el caso de la columna identity

    asi podrías crear la llave que deseas

    Create Table #Vendedor
    ( 
    iCorrelativo Int Identity(1,1),
    iCodigoVendedor As 'V'+RIGHT('000'+RTRIM(iCorrelativo) ,3)PERSISTED NOT NULL ,
    vNombreVendedor Varchar(100)
    )
    
    Insert Into #Vendedor Values('Vendedor 1')
    Insert Into #Vendedor Values('Vendedor 2')
    Insert Into #Vendedor Values('Vendedor 3')
    Insert Into #Vendedor Values('Vendedor 4')
    Insert Into #Vendedor Values('Vendedor 5')
    Insert Into #Vendedor Values('Vendedor 6')
    Alter Table #Vendedor add primary key (iCodigoVendedor)
       
    Select * From #Vendedor
    Drop Table #Vendedor
    
    


    Votar es agradecer.
    Saludos.
    Lima-Perú

    miércoles, 8 de noviembre de 2017 16:04