Sintaxis procedimiento almacenado

17/07/2004 - 09:10 por MhBeyle | Informe spam
Hola, muy buenas ..

Estoy un pelín liadillo con la sintaxis de los procedimientos
almacenados, no sé si lo hago del todo bien.

Tengo lo siguiente:

CREATE PROCEDURE sp_STCK @num_alb varchar (9), @num_ped varchar (9)
AS

UPDATE CABECERA
SET STATUS=2,
TYPE=2,
NUM=@num_alb
WHERE NUM = @num_ped

UPDATE LINEA
SET DO_TYPE=2,
REF_PED=NUM,
NUM=@num_alb,
PR_1=PR_UNIT,
PR_2=PR_BR,
MOV_STOCK=3
WHERE NUM = @num_ped

UPDATE STOCK
SET CANT=(CANT-LINEA.CANT)
FROM LINEA
WHERE LINEA.REF=STOCK.REF
AND LINEA.ALMACEN=STOCK.ALMACEN
AND LINEA.NUM = @num_alb

GO


Los dos parámetros toman un número de pedido (que ya existe en las
tablas) y un número de albarán (que se creará). El primer UPDATE
actualiza las lineas de la cabecera, el segundo de las líneas del
pedido y el tercero el stock de los productos actualizados.

Funciona a la perfección en el Query Analizer declarando las variables
y dandoles un valor, pero al trasladarlo a un stored procedure, sólo
se ejecuta el último UPDATE, o eso me parece a mí. Curiosamente, el
último UPDATE actualiza sólo aquellos productos que aparecen en la
conversión de un pedido en albarán, que se hace durante los dos
primeros UPDATE. Esto es correcto, pero no se reflean los cambios de
los dos primeros UPDATE.

¿Qué hago mal? ¿Se pueden poner varios UPDATE en un stored procedure?
¿Hay que poner EXECUTE o GO o algo así para que se reflejen los
cambios?

Estoy un pelín verde de sintaxis con los sp y a lo mejor pregunto una
tontería.

MhBeyle ___
 

Leer las respuestas

#1 José Hurtado
17/07/2004 - 11:07 | Informe spam
En la última sentencia:

UPDATE STOCK
SET CANT=(CANT-LINEA.CANT)
FROM LINEA
WHERE LINEA.REF=STOCK.REF
AND LINEA.ALMACEN=STOCK.ALMACEN
AND LINEA.NUM = @num_alb

creo que debería ser:

UPDATE STOCK
SET CANT=(CANT-LINEA.CANT)
FROM STOCK JOIN LINEA
ON (STOCK.ALMACEN = LINEA.ALMACEN)
AND (STOCK.REF = LINEA.REF)
WHERE
LINEA.NUM = @num_alb


Saludos.

Ing. José Hurtado
MCP (candidato a MCDBA)

"MhBeyle" escribió en el mensaje
news:
Hola, muy buenas ..

Estoy un pelín liadillo con la sintaxis de los procedimientos
almacenados, no sé si lo hago del todo bien.

Tengo lo siguiente:

CREATE PROCEDURE sp_STCK @num_alb varchar (9), @num_ped varchar (9)
AS

UPDATE CABECERA
SET STATUS=2,
TYPE=2,
NUM=@num_alb
WHERE NUM = @num_ped

UPDATE LINEA
SET DO_TYPE=2,
REF_PED=NUM,
NUM=@num_alb,
PR_1=PR_UNIT,
PR_2=PR_BR,
MOV_STOCK=3
WHERE NUM = @num_ped

UPDATE STOCK
SET CANT=(CANT-LINEA.CANT)
FROM LINEA
WHERE LINEA.REF=STOCK.REF
AND LINEA.ALMACEN=STOCK.ALMACEN
AND LINEA.NUM = @num_alb

GO


Los dos parámetros toman un número de pedido (que ya existe en las
tablas) y un número de albarán (que se creará). El primer UPDATE
actualiza las lineas de la cabecera, el segundo de las líneas del
pedido y el tercero el stock de los productos actualizados.

Funciona a la perfección en el Query Analizer declarando las variables
y dandoles un valor, pero al trasladarlo a un stored procedure, sólo
se ejecuta el último UPDATE, o eso me parece a mí. Curiosamente, el
último UPDATE actualiza sólo aquellos productos que aparecen en la
conversión de un pedido en albarán, que se hace durante los dos
primeros UPDATE. Esto es correcto, pero no se reflean los cambios de
los dos primeros UPDATE.

¿Qué hago mal? ¿Se pueden poner varios UPDATE en un stored procedure?
¿Hay que poner EXECUTE o GO o algo así para que se reflejen los
cambios?

Estoy un pelín verde de sintaxis con los sp y a lo mejor pregunto una
tontería.

MhBeyle ___

Preguntas similares