Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Ayuda Chikos Con un Stored

Estas en el tema de Ayuda Chikos Con un Stored en el foro de SQL Server en Foros del Web. disculpen tengo este estored ke maneja un cursor i tablas temporales ,kisisera saber si se puiede hacer de otra manera , que no necesite usar ...
  #1 (permalink)  
Antiguo 02/01/2007, 12:17
Avatar de dianatorres  
Fecha de Ingreso: diciembre-2006
Mensajes: 26
Antigüedad: 17 años, 5 meses
Puntos: 0
Sonrisa Ayuda Chikos Con un Stored



disculpen tengo este estored ke maneja un cursor i tablas temporales ,kisisera saber si se puiede hacer de otra manera , que no necesite usar estp ke la verdad se tarda mucho i trae mui pocos registros, me gustaria saber si se puede hacer de otra manera porfavor ayudenme


CREATE PROC ABSELNUMFABDUPLICADOSDIFASIGNA
AS

DECLARE @IdLGS1 int
DECLARE @Grupo1 smallint
DECLARE @Secuencia1 smallint
DECLARE @NumeroFabrica1 char(25)
DECLARE @Origen1 char(3)
DECLARE @IdLGS2 int
DECLARE @Grupo2 smallint
DECLARE @Secuencia2 smallint
DECLARE @NumeroFabrica2 char(25)
DECLARE @Origen2 char(3)
DECLARE @Ori1 tinyint
DECLARE @Ori2 tinyint
DECLARE @sw_paso tinyint
DECLARE @Cuenta1 smallint
DECLARE @Cuenta2 smallint

select @sw_paso = 0

CREATE TABLE #NumerosFabDupDifAsig
( Grupo1 smallint,Secuencia1 smallint, NumeroFabrica1 char(25), Origen1 char(3),
Grupo2 smallint,Secuencia2 smallint, NumeroFabrica2 char(25), Origen2 char(3))

DECLARE ARTICULOS CURSOR FOR
SELECT Secuencias_a.IdLGS,
Secuencias_a.IdGrupo,
Secuencias_a.IdSecuencia,
Secuencias_a.NumFabrica,
Secuencias_a.IdFolioOrigen,
Secuencias_b.IdLGS,
Secuencias_b.IdGrupo,
Secuencias_b.IdSecuencia,
Secuencias_b.NumFabrica,
Secuencias_b.IdFolioOrigen
FROM Secuencias Secuencias_a,
Secuencias Secuencias_b
WHERE ( Secuencias_a.NumFabrica = Secuencias_b.NumFabrica ) and
( Secuencias_a.IdFolioOrigen = Secuencias_b.IdFolioOrigen ) and
( Secuencias_a.IdLGS <> Secuencias_b.IdLGS )
ORDER BY Secuencias_a.NumFabrica ASC,
Secuencias_b.NumFabrica ASC

OPEN ARTICULOS

FETCH NEXT FROM ARTICULOS into @IdLGS1, @Grupo1, @Secuencia1, @NumeroFabrica1, @Ori1, @IdLGS2, @Grupo2, @Secuencia2, @NumeroFabrica2, @Ori2
while @@FETCH_STATUS = 0
begin
SELECT @Cuenta1 = 0, @Cuenta2 = 0

SELECT @Origen1 = ABFoliosPedidos.IdCve
FROM ABFoliosPedidos
WHERE ABFoliosPedidos.IdFolio = @Ori1

SELECT @Origen2 = ABFoliosPedidos.IdCve
FROM ABFoliosPedidos
WHERE ABFoliosPedidos.IdFolio = @Ori2

SELECT @Cuenta1 = count(ABAsignaciones.IdAsigna)
FROM ABAsignaciones
WHERE ABAsignaciones.IdLGS = @IdLGS1

SELECT @Cuenta2 = count(ABAsignaciones.IdAsigna)
FROM ABAsignaciones
WHERE ABAsignaciones.IdLGS = @IdLGS2

if @Cuenta1 = @Cuenta2
BEGIN
FETCH NEXT FROM ARTICULOS into @IdLGS1, @Grupo1, @Secuencia1, @NumeroFabrica1, @Ori1, @IdLGS2, @Grupo2, @Secuencia2, @NumeroFabrica2, @Ori2
continue
END

SELECT @sw_paso = Grupo1
FROM #NumerosFabDupDifAsig
WHERE (Grupo1 = @Grupo2 and
Secuencia1 = @Secuencia2 ) or
(Grupo2 = @Grupo1 and
Secuencia2 = @Secuencia1)

if @sw_paso = 0
INSERT INTO #NumerosFabDupDifAsig
( Grupo1,Secuencia1,NumeroFabrica1,Origen1,
Grupo2,Secuencia2,NumeroFabrica2,Origen2)
VALUES (@Grupo1, @Secuencia1, @NumeroFabrica1,@Origen1,
@Grupo2, @Secuencia2, @NumeroFabrica2,@Origen2)

select @sw_paso = 0
FETCH NEXT FROM ARTICULOS into @IdLGS1, @Grupo1, @Secuencia1, @NumeroFabrica1, @Ori1, @IdLGS2, @Grupo2, @Secuencia2, @NumeroFabrica2, @Ori2

end
close ARTICULOS
DEALLOCATE ARTICULOS
SELECT Grupo1 ,Secuencia1 , NumeroFabrica1 , Origen1 ,
Grupo2 ,Secuencia2 , NumeroFabrica2 , Origen2
FROM #NumerosFabDupDifAsig
ORDER BY NumeroFabrica1 Asc,
NumeroFabrica2 Asc
GO
  #2 (permalink)  
Antiguo 02/01/2007, 15:24
Avatar de dianatorres  
Fecha de Ingreso: diciembre-2006
Mensajes: 26
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Ayuda Chikos Con un Stored

poke nadie me ayuda =(....no se puede acaso , solo tiene ke tener cursores no hay otra manera
  #3 (permalink)  
Antiguo 02/01/2007, 15:40
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: Ayuda Chikos Con un Stored

Hola Diana!.

Creo que algo que le hace falta a tu pregunta es que expliques con datos de ejemplo que es lo que quieres hacer, para poder ayudarte. Porque leer tu SP es algo complicado y más sino conoces la estructura de las tablas.

Saludos y suerte!!
  #4 (permalink)  
Antiguo 03/01/2007, 11:57
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Ayuda Chikos Con un Stored

Segun yo, seria algo como esto.
Si existen indices para los campos de los joins, esto deberia correr muy rapido.


Secuencias: NumFabrica, IdFolioOrigen, IDLGS
ABFoliosPedidos : IdFolio
ABAsignaciones : IdLGS

Código:
Declare @NumerosFabDupDifAsig table( 
        Grupo1            smallint
       ,Secuencia1        smallint
       ,NumeroFabrica1    char(25)
       ,Origen1           char(3)
       ,Grupo2            smallint
       ,Secuencia2        smallint
       ,NumeroFabrica2    char(25)
       ,Origen2           char(3)
       ,Cuenta1           int
       ,Cuenta2           int)


Insert into @NumerosFabDupDifAsig
Select   a.IdLGS                       IdLGS1
        ,a.IdGrupo                     IdGrupo1 
        ,a.IdSecuencia                 IdSecuencia1  
        ,a.NumFabrica                  NumFabrica1
        ,isnull(F1.IdCve, '0')         Origen1 
        ,b.IdLGS                       IdLGS2
        ,b.IdGrupo                     IdGrupo2
        ,b.IdSecuencia                 IdSecuencia2
        ,b.NumFabrica                  NumFabrica2
        ,isnull(F2.IdCve,'0')          Origen2
        ,isnull(count(G1.IdAsigna),0)  Cuenta1
        ,isnull(count(G2.IdAsigna),0)  Cuenta2
From    Secuencias a (nolock)
Inner join 
        Secuencias b (nolock)
On      a.NumFabrica    = b.NumFabrica      And 
        a.IdFolioOrigen = b.IdFolioOrigen   And 
        a.IdLGS <> b.IdLGS 
Left outer join
        ABFoliosPedidos   F1 (nolock)
On      a.IdFolioOrigen  = F1.IdFolio
Left outer join
        ABFoliosPedidos   F2 (nolock)
On      b.IdFolioOrigen  = F2.IdFolio
Left outer join
        ABAsignaciones    G1 (nolock)
On      a.IdLGS = G1.IdLGS
Left outer join
        ABAsignaciones    G2 (nolock)
On      b.IdLGS = G2.IdLGS
Order by 
        a.NumFabrica, 
        b.NumFabrica 

--------------------------------------------------------------------------------------
-- Aqui tengo duda:  Segun yo, se debe seleccionar solo aquellos 
-- registros donde no exista correspondencia entre entre la pareja Grupo y Secuencia
-- de ambas tablas.
-- Es decir, si un grupo y secuencia de A1 se encuentra tambien en A2 ya no se muestra
-- y viceversa.
--------------------------------------------------------------------------------------
Select N1.* 
From   @NumerosFabDupDifAsig N1 
Left outer join
       @NumerosFabDupDifAsig N2
On     N1.Grupo1      = N2.Grupo2     And
       N1.Secuencia1  = N2.Secuencia2 
Left outer join
       @NumerosFabDupDifAsig N3
On     N1.Grupo2      = N3.Grupo1     And
       N1.Secuencia2  = N3.Secuencia1 
Where  N2.Grupo2 is null    And 
       N3.Grupo1 is null    And 
       N1.Cuenta1 <> N1.Cuenta2


Un saludo y Feliz año nuevo a todos!

__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 03/01/2007, 12:19
Avatar de dianatorres  
Fecha de Ingreso: diciembre-2006
Mensajes: 26
Antigüedad: 17 años, 5 meses
Puntos: 0
Ayuda Chikos Con un Stored

Gracias por ayudarme chiko , lo voy a checar para ver si no surgue alguna duda
  #6 (permalink)  
Antiguo 03/01/2007, 19:49
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Ayuda Chikos Con un Stored

simon, así es un pex, da hueva analizar!

que explique que necesita y vualá!
Saludos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:45.