SQL Server - GENERAR CODIGO CON PRODECIMIENTOS ALMACENADOS

   
Vista:
Imágen de perfil de Percy

GENERAR CODIGO CON PRODECIMIENTOS ALMACENADOS

Publicado por Percy (4 intervenciones) el 03/03/2016 21:45:37
Buenas tardes comunidad tengo un inconveniente con un procedimiento almacenado que genera codigos de identificacion:

CAT00001
CAT00002
CAT00003
CAT00004
CAT00005
CAT00006
CAT00007
CAT00008
CAT00009

Hasta ahi lo hace pero cuando debe generar el registro : CAT00010 vuelve al primero osea al codigo: CAT00001
nose que estoy haciendo mal incluyo mi procedimiento.


ALTER PROCEDURE [dbo].[pa_Generar_Codigo_Categorias](
@ID_CATEGORIA varchar(8) output)
as begin
Declare @Cant Int
Set @Cant=(Select Count(*) From tb_Categoria)
begin
If ((select COUNT(*) from tb_Categoria)=0)
Set @ID_CATEGORIA ='CAT00001'
Else
Begin
Set @ID_CATEGORIA =(Select max(SubString(db_codigo_categoria,4,6))From tb_Categoria WHERE LEFT(db_codigo_categoria,3)='CAT')
Set @ID_CATEGORIA=LEFT('CAT',3)+ Right('0000'+ Cast(Cast(@ID_CATEGORIA As Int)+1 As VarChar(8)),6)
End
END
end

Espero me puedan dar una mano. Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

GENERAR CODIGO CON PRODECIMIENTOS ALMACENADOS

Publicado por Isaias (3180 intervenciones) el 03/03/2016 22:07:52
No se cual sea tu nivel en T-SQL, pero es muy logico lo que pasa, en esta linea, tienes el error

1
Set @ID_CATEGORIA=LEFT('CAT',3)+ Right('0000'+ Cast(Cast(@ID_CATEGORIA As Int)+1 As VarChar(8)),6)

Ya que al llegar al 10, son DOS numeros mas, no UNO como lo haces del 1 al 9

¿me expico?

Deberias hacerlo de forma DINAMICA

1
2
3
4
declare @Cant int
declare @ID_CATEGORIA as varchar(8)
set @Cant = 10
select 'CAT' +replicate ('0',(5 - len(@Cant))) + convert(varchar, @Cant)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Percy

GENERAR CODIGO CON PRODECIMIENTOS ALMACENADOS

Publicado por Percy (4 intervenciones) el 04/03/2016 13:29:19
Muchas gracias isaias por la pronta respuesta si bien es cierto mi nivel de T-SQL en basica me podrias indicar como acoplarlo a mi procedimiento de tal manera que me siga generando los codigos de la siguiente manera.

CAT00001
CAT00002
CAT00003
CAT00004
CAT00005
CAT00006
CAT00007
CAT00008
CAT00009
CAT00010
...
CAT00100
..
CAT01000
y asi sucesivamente he tratado de acoplar la linea de codigo pero no logro resultado. Muchas gracias estare atento a tu ayuda brindada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

GENERAR CODIGO CON PRODECIMIENTOS ALMACENADOS

Publicado por Isaias (3180 intervenciones) el 04/03/2016 17:38:56
Desconozco si funcione:

ALTER PROCEDURE [dbo].[pa_Generar_Codigo_Categorias](
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@ID_CATEGORIA varchar(8) output)
as begin
Declare @Cant Int
Set @Cant=(Select Count(*) From tb_Categoria)
begin
If ((select COUNT(*) from tb_Categoria)=0)
Set @ID_CATEGORIA ='CAT00001'
Else
Begin
SELECT @ID_CATEGORIA = max(SubString(db_codigo_categoria,4,6))
FROM tb_Categoria
WHERE LEFT(db_codigo_categoria,3)='CAT')
SET @ID_CATEGORIA = 'CAT' +replicate ('0',(6 - len(@ID_CATEGORIA))) + convert(varchar, @ID_CATEGORIA)
-- Set @ID_CATEGORIA=LEFT('CAT',3) + Right('0000'+ Cast(Cast(@ID_CATEGORIA As Int)+1 As VarChar(8)),6)
END
END
END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Percy

GENERAR CODIGO CON PRODECIMIENTOS ALMACENADOS

Publicado por Percy (4 intervenciones) el 04/03/2016 18:10:23
Muchas Gracias Isaias pero lamentablemente no me funciono el procedimiento genera el primer registro CAT00001 y luego regresa al CAT00000, encontre una solucion pero con lineas de codigo vb porsiacaso a alguien le interese.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Public Sub Generar_Codigo_Categoria(ByVal codigoCat)
 
        'Dim codigoCat As String
        Dim total As Integer
        Try
            conectarse()

            cmd_inv = New SqlCommand("Select count(*) as totalRegistros from tb_Categoria", conn_inv)
            dr_inv = cmd_inv.ExecuteReader
            If dr_inv.Read Then
                total = CInt(dr_inv.Item("totalRegistros"))
            End If
            dr_inv.Close()

            If total < 10 Then
                codigoCat = "C-00000" + total.ToString

            ElseIf total < 100 Then
                codigoCat = "C-0000" + total.ToString '10 C-00010'
 
            ElseIf total < 1000 Then
                codigoCat = "C-000" + total.ToString

            ElseIf total < 10000 Then
                codigoCat = "C-00" + total.ToString

            ElseIf total < 100000 Then
                codigoCat = "C-0" + total.ToString

            End If

        Catch ex As Exception

            MessageBox.Show("Error al generar el codigo: " + ex.ToString)
            desconectarse()

        End Try

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

GENERAR CODIGO CON PRODECIMIENTOS ALMACENADOS

Publicado por Isaias (3180 intervenciones) el 04/03/2016 18:34:21
Demasiado codigo, para hacer algo tan simple, pero al cliente, lo que pida y para que veas que si FUNCIONA...

1
2
3
4
5
6
7
8
declare @Cant int
set @Cant = 1
while @Cant < 1000
begin
select 'CAT' +replicate ('0',(5 - len(@Cant))) + convert(varchar, @Cant)
set @Cant = @Cant + 1
continue
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Percy

GENERAR CODIGO CON PRODECIMIENTOS ALMACENADOS

Publicado por Percy (4 intervenciones) el 04/03/2016 19:35:38
Nuevamente gracias pero he ejecutado el procedimiento que me indicaste

ALTER PROCEDURE [dbo].[pa_Generar_Codigo_Categorias](
@ID_CATEGORIA varchar(8) output)

as begin
declare @Cant int
set @Cant = 1
while @Cant < 1000
begin

Set @ID_CATEGORIA = (select 'CAT' +replicate ('0',(5 - len(@Cant))) + convert(varchar, @Cant))
Set @Cant = @Cant + 1


continue
end
end


le fije la variable @ID_CATEGORIA (utilizo esta variable para asignarle a mi textbox) al select y me muestra como primer codigo el codigo : CAT00999, nbose si algo estoy haciendo mal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar