none
como mejorar la manera de un autogenerado RRS feed

  • Pregunta

  • esta es una de mis maneras de autogenerar un campo en SQl desde visual basic.net 2008

    codigo del procedimiento en SQL

    ALTER proc [dbo].[ClienteInsertar]
    @NomCli            nvarchar(50),
    @ApePatCli        nvarchar(50),
    @ApeMatCli        nvarchar(50),
    @DNICli            char(8),
    @RUCCli            char(12),
    @FonoCli        varchar(7),
    @ProvViveCli    varchar(30),
    @DepViveCli        varchar(30),
    @DistViveCli    varchar(30),
    @Direccion        nvarchar(50)
    as

    declare @correlativo int
    declare @cod char(10)

    select @correlativo =MAX (NumCli)+1 from cliente
    if (select COUNT (*)from cliente )=0
    begin
    select @correlativo=0
    end

    set @cod ='A0'+CAST (@correlativo As varchar(4))

    INSERT INTO cliente
                          (CodCli,NumCli,NomCli, ApePatCli, ApeMatCli, DNICli, RUCCli, FonoCli, ProvViveCli, DepViveCli, DistViveCli, Direccion)
    VALUES     (@cod,@correlativo,@NomCli,@ApePatCli,@ApeMatCli,@DNICli,@RUCCli,@FonoCli,@ProvViveCli,@DepViveCli,@DistViveCli,@Direccion)
    return

    Mi consulta es cuando ejecuto este proc. toma: 1er nombre(2 letras), Appeterno(2 letras),apell materno (4 letras) , esto funciona perfectamente pero mi problema es digamos si son hermanos que tienen el mismo nombre y obiamente los apellidos serian iguales Aqui viene mi duda ¿como haria para que Sql solucione esto osea no quisera que me diga que ay un error porq no lo hay sino q me dijera que ingrese otro nombre distinto o algo asi ?

    Agradeceria cualquier ayuda respecto a este punto

    lunes, 30 de julio de 2012 3:59

Todas las respuestas

  • que sentido tiene esto

    select @correlativo =MAX (NumCli)+1 from cliente
    if (select COUNT (*)from cliente )=0
    begin
    select @correlativo=0
    end

    porque directo no evaluas la variable

    select @correlativo = ISNULL(MAX (NumCli), -1)+1 from cliente

    alli ya tiene el cero porque si el max devuelve nada entonces retiena -1

    -----

    lo de las letras del pater-materno no lo entendi, si estas usando un correlativo secuancia que sentido tienes esto que planteas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 30 de julio de 2012 4:22
  • me explico mejor: lo que yo ago aqui es que en SQl en la columna codigo (ingreso letras unicas de un cliente ejemplo

    Carla Torres andahua

    Codigo seria:  CatoAnda  en eso consta mi codigo fuente en Sql


    Sino que mi problema era si viene un usurio que tengan los mismos datos el como reparar o corregir dicho error
    lunes, 30 de julio de 2012 4:28
  • el tema es que ese tipo de codificacion esta bien si quieres un campo x de dato

    pero es incorrecto para usar como key de una tabla porque no asegura que sea unico

    puedes si quieres seguir generando este tipo de codificacion pero no como key, usa un autonumerico como identificador que sea numerico y secuancial, despeus del resto de los campos crealos como quieras

    pero esto que haces como key esta mal, lo principal porque la key no deberia ser alfanumerica, lo recomendable es numerica y secuencial

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 30 de julio de 2012 11:44