entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

Realizar un consecutivo en sql server

Quien me ayuda en este siguiente problema?

Tengo la siguiente sentencia sql, la cual realizo los consecutivos..-.

 Select TOP 1 (CODDPTOCATE)+1 AS CODDPTOCATE From HDCATEGO WHERE CODDEPTO='21' 

Y el resultado es: 2104 que en este caso es correcto

pero mi problema es cuando Cree un nuevo departamento y hice el mismo procedimiento para que me genera el consecutivo.

 Select TOP 1 (CODDPTOCATE)+1 AS CODDPTOCATE From HDCATEGO WHERE CODDEPTO='22'

y el resultado = vació

y lo que pretendo es que si el nuevo departamento es 22, que el consecutivo de CODDPTOCATE sea 2201 dependiendo del departamento

ejemplo
Departamento nuevo, codigo "23" y que el CODDPTOCATE sea 2301 para que cuando escoja ese departamento su consecutibo se a normal 2302,2303, y así sucesivamente

estos son los departamentos 01,02,03,04,05,06,07,08,09,10,11,12,13....21
categorias asociadas 0101,0102----0201,0201---0301,0302.....---2101

2 Respuestas

1voto

Ra-Hulk Puntos1490

Checa esto, solo le tendrias que pasar el valor del CODDEPTO

--Le pasamos el Valor de CODDEPTO y se asigna a la variable @varDEPTO
DECLARE @varDEPTO varchar(100) = 23, @varSalida varchar(100) 

-- Primero evaluamos si el CODDEPTO tiene informacion
IF (Select TOP 1 COUNT(((CODDPTOCATE)+1)) From HDCATEGO WHERE CODDEPTO=@varDEPTO) = 0
    -- si es igual a cero iniciamos el contador en 1
    BEGIN
        -- aqui solo imprimo me imagno que aqui tendria que ir tu INSERT INTO o tu UPDATE
        PRINT @varDEPTO + '01'
    END
ELSE 
    -- si ya tiene valores guardamos el ultimo mas uno en la variable  @varSalida
    BEGIN
        Select TOP 1 @varSalida = ((CODDPTOCATE)+1) From HDCATEGO WHERE CODDEPTO=@varDEPTO order by CODDPTOCATE desc

        -- aqui solo imprimo me imagno que aqui tendria que ir tu INSERT INTO o tu UPDATE

        -- yo solo le di presentacion
        if LEN(@varSalida) = 1
            PRINT @varDEPTO + '0' + @varSalida
        else
            PRINT @varDEPTO + @varSalida
    END
GO

0voto

ManHol comentado

Gracias me sirvió.
pero sabes hacerlo sin procedimientos

1voto

Ra-Hulk comentado

Como sin procedimiento?

En una sola consulta que te arroje el resultado, no sabría como hacerlo.

Y veo necesario usar programación, para poder controlar las excepciones.

0voto

ManHol comentado

hey amigo listo esta bien, pero lo ejecuto y me sale es un mensaje el resultado y no
de esta manera como quiero que me salga :
CODDPTOCATE
2301

y lo que sale es:

mensaje
2301

1voto

ankeorum Puntos7210

Tu problema es que CODDPTOCATE para CODDEPTO = 'nuevo código' no existe entonces tienes que hacer lo siguiente:

$result = sqlsrv_query ($db_conn, "select top 1 (CODDPTOCATE)+1 AS CODDPTOCATE From HDCATEGO WHERE CODDEPTO='22'");
while $row = sqlsrv_fetch_array($result);
{
   //Comprobamos si el campo está vacío porque sea un departamento nuevo
   if ($row{'CODDPTOCATE'} == "")
   {
       $coddptocate = 01;
   }
   else
   {
       $coddptocate = $row{'CODDPTOCATE'};
   }
//Fin del while
}

Creo que eso es lo que necesitas, si no fuera así lo siento, no habré entendido bien tu pregunta jejejeje

SaludoS!

0voto

ManHol comentado

Hola gracias por el aporte, me explicaría mejor, es que estoy utilizando slq server management, y pues soy nuevo en esto y pues el ejemplo que hizo no lo entendí pero es así como lo quiero

-1voto

ankeorum comentado

Si se solucionó tu duda marca como solucionada.

Un saludo!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta