Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Recorrer una tabla dentro de un Procedure en MSSQL (https://www.clubdelphi.com/foros/showthread.php?t=68231)

Softweb 02-06-2010 09:23:59

Recorrer una tabla dentro de un Procedure en MSSQL
 
Hola a todos.

Sabria alguno como se puede hacer un WHILE de una tabla dentro de un procedure MSSQL.

saludos y gracias.

Neftali [Germán.Estévez] 02-06-2010 10:27:13

Estaría bien que explicaras qué quieres hacer dentro de ese recorrido.

Por ejempo, este recorre la tabla y "pinta" el código (si lo lanzas desde el Query Analizer)
Código SQL [-]
CREATE PROCEDURE [sp_recorrido] AS

DECLARE    @Codigo INT

-- Recorrido y visualización del código
SET @Codigo=0
DECLARE ElCursor CURSOR STATIC LOCAL FORWARD_ONLY FOR
                    SELECT CodTabla                    
                    FROM MiTabla

OPEN ElCursor FETCH NEXT FROM ElCursor INTO @Codigo
        WHILE (@@FETCH_STATUS = 0) BEGIN
                
            print @Codigo
            FETCH NEXT FROM ElCursor INTO @Condigo
        END
CLOSE ElCursor
DEALLOCATE ElCursor

Softweb 02-06-2010 16:18:40

Gracias Neftali

Tienes razón debería haber indicado lo que quería hacer, pues es recorrer una tabla de libros que hay en una lista para buscar si hay existencias en otra tabla.

Algo parecido a esto, ya se que no esta bien a pesar de haber aplicado lo que me digiste en tu respuesta pero es que en TRANSACT-SQL estoy muy verde.

Por cierto sabes de algun libro o tutorial sobre TRANSACT-SQL.

Código SQL [-]
ALTER PROCEDURE dbo.PROC_BUSCAR_HOJILLAS
@CENTRO int, 
@PEDIDO int, 
@TOTAL int OUT
AS
DECLARE @PRETOTAL INT, @ISBN varchar(20)
SET @PRETOTAL=0
SET @ISBN='' 

DECLARE ElCursor CURSOR STATIC LOCAL FORWARD_ONLY FOR
  SELECT PEDUSMD_ISBN FROM dbo.PEDIDOS_USMARCD 
  WHERE CENTRO_CODIGO=@CENTRO AND PEDUSMD_CODIGO=@PEDIDO

OPEN ElCursor FETCH NEXT FROM ElCursor INTO @ISBN
  WHILE (@@FETCH_STATUS = 0) 
    BEGIN
    SELECT
    SUM(ARTICULOS_EXIS_INI_FIRME) AS EXIS_INI_FIRME,
    SUM(ARTICULOS_EXIS_INI_DEPOSITO) AS EXIS_INI_DEPOSITO,
    SUM(ARTICULOS_EXIS_ACT_FIRME) AS EXIS_ACT_FIRME,
    SUM(ARTICULOS_EXIS_ACT_DEPOSITO) AS EXIS_ACT_DEPOSITO,
    SUM(ARTICULOS_UNIDAD_PEND_RECIBIR) AS UNIDAD_PEND_RECIBIR,
    SUM(ARTICULOS_UNIDAD_PEND_SERVIR) AS UNIDAD_PEND_SERVIR,
    SUM(ARTICULOS_UNIDAD_EXAMEN) AS UNIDAD_EXAMEN
    FROM dbo.ALMACEN_STOCK
    WHERE ARTICULOS_CODIGO IN (SELECT ARTICULOS_CODIGO FROM dbo.ARTICULOS WHERE ARTICULOS_REFERENCIA_PROVEEDOR=@ISBN                
    IF ((EXIS_ACT_FIRME + EXIS_ACT_DEPOSITO)- UNIDAD_EXAMEN - EXIS_INI_DEPOSITO) > 0 THEN
      BEGIN
      @PRETOTAL = @PRETOTAL+1
      END      
    FETCH NEXT FROM ElCursor INTO @ISBN
    END
CLOSE ElCursor
DEALLOCATE ElCursor

@TOTAL = @PRETOTAL
GO

Saludos y muchas gracias por tu respuesta.

Softweb 02-06-2010 22:59:39

Ya lo tengo solucionado.

Código SQL [-]
CREATE PROCEDURE dbo.PROC_BUSCAR_HOJILLAS
@CENTRO int, 
@PEDIDO int, 
@TOTAL int OUT
AS
DECLARE @PRETOTAL INT, @ISBN varchar(20),
@EXIS_INI_DEPOSITO INT, @EXIS_ACT_FIRME INT, @EXIS_ACT_DEPOSITO INT, @UNIDAD_EXAMEN INT
SET @PRETOTAL=0
SET @ISBN='' 

DECLARE ElCursor CURSOR STATIC LOCAL FORWARD_ONLY FOR
  SELECT PEDUSMD_ISBN FROM dbo.PEDIDOS_USMARCD 
  WHERE CENTRO_CODIGO=@CENTRO AND PEDUSMD_CODIGO=@PEDIDO

OPEN ElCursor FETCH NEXT FROM ElCursor INTO @ISBN
  WHILE (@@FETCH_STATUS = 0) 
    BEGIN
    SELECT
    @EXIS_INI_DEPOSITO=SUM(ARTICULOS_EXIS_INI_DEPOSITO),
    @EXIS_ACT_FIRME=SUM(ARTICULOS_EXIS_ACT_FIRME),
    @EXIS_ACT_DEPOSITO=SUM(ARTICULOS_EXIS_ACT_DEPOSITO),
    @UNIDAD_EXAMEN=SUM(ARTICULOS_UNIDAD_EXAMEN)
    FROM dbo.ALMACEN_STOCK
    WHERE ARTICULOS_CODIGO IN (SELECT ARTICULOS_CODIGO FROM dbo.ARTICULOS WHERE ARTICULOS_REFERENCIA_PROVEEDOR=@ISBN)
                    
    IF ((@EXIS_ACT_FIRME + @EXIS_ACT_DEPOSITO)- @UNIDAD_EXAMEN - @EXIS_INI_DEPOSITO) > 0
      BEGIN
      SET @PRETOTAL = @PRETOTAL+1
      END      
    FETCH NEXT FROM ElCursor INTO @ISBN
    END
CLOSE ElCursor
DEALLOCATE ElCursor

SET @TOTAL = @PRETOTAL
GO


Saludos y gracias.

Neftali [Germán.Estévez] 03-06-2010 10:25:56

Gracias por colocar la solución final. ;)

galess 21-07-2010 21:08:44

Pregunta sobre servicio
 
hola SOFTWEB, como manipulste la forma con el servicio ?, saludos y grcias !!!


La franja horaria es GMT +2. Ahora son las 19:41:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi