Estoy migrando unos proc almacenados de firebird a sql server 2008 agradeceria ayuda...un ejemplo de tipos de procedimientos con los que me estoy enfrentando es:
CREATE PROCEDURE REPORTE_ENTRADAS_ALMACEN (
fecha1 date,
fecha2 date,
almacen integer,
sucursal integer)
returns (
codigo varchar(20),
id_presentacion integer,
id_caracteristica integer,
fecha date,
id_movto integer,
clasemovto varchar(1),
id_almacen_destino integer,
cantidad float,
costo float,
total float,
id_tipomovto integer,
referencia varchar(30),
snombreproducto varchar(81),
id_almacen integer,
alm integer,
snombrealmacendestino varchar(30),
snombrealmacen varchar(30),
impuestos float,
subtotal float,
id_grupo varchar(7),
snombregrupo varchar(80),
id_movtorel integer)
as
declare variable v_descuento integer;
BEGIN
/*ENTRADAS*/
FOR SELECT
MOVTOS1.FECHA,
MOVTOS1.ID_TIPOMOVTO,
MOVTOS1.ID_MOVTO,
MOVTOS1.REFERENCIA,
MOVTOS1.CLASEMOVTO,
MOVTOS2.COSTO,
MOVTOS2.CANTIDAD,
MOVTOS2.CODIGO as codigo,
MOVTOS1.id_almacendestino,
MOVTOS2.ID_PRESENTACION,
MOVTOS2.ID_CARACTERISTICA,
MOVTOS2.descuento,
MOVTOS1.id_almacen,
MOVTOS2.total,
MOVTOS2.impuestos,
MOVTOS1.id_movtorel
FROM
MOVTOS1
INNER JOIN MOVTOS2 ON (MOVTOS1.CLASEMOVTO = MOVTOS2.CLASEMOVTO) AND (MOVTOS1.ID_TIPOMOVTO = MOVTOS2.ID_TIPOMOVTO) AND (MOVTOS1.ID_MOVTO = MOVTOS2.ID_MOVTO) AND (MOVTOS1.SUCURSAL = MOVTOS2.SUCURSAL) AND (MOVTOS1.ID_ALMACEN = MOVTOS2.ID_ALMACEN)
INNER JOIN TIPOMOVTOS ON (MOVTOS1.ID_TIPOMOVTO = TIPOMOVTOS.ID_TIPOMOVTO) AND (MOVTOS1.CLASEMOVTO = TIPOMOVTOS.CLASEMOVTO)
WHERE
(MOVTOS1.SUCURSAL = :SUCURSAL) AND
((MOVTOS1.clasemovto = 'E') or (MOVTOS1.clasemovto = 'D')) AND
(MOVTOS1.ID_ALMACEN = :ALMACEN) AND
(MOVTOS1.STATUS<>99) AND
(TIPOMOVTOS.AFECTA_INVENTARIOS = 1) and
(MOVTOS1.fecha BETWEEN :FECHA1 AND :FECHA2)
INTO
:FECHA,
:ID_TIPOMOVTO,
:ID_MOVTO,
:REFERENCIA,
:CLASEMOVTO,
:COSTO,
:CANTIDAD,
:CODIGO,
:ID_ALMACEN_DESTINO,
:ID_PRESENTACION,
:ID_CARACTERISTICA,
:v_descuento,
:ID_ALMACEN,
:TOTAL,
:IMPUESTOS,
:ID_MOVTOREL
DO
BEGIN
if (v_descuento is null) then
v_descuento = 0;
if (v_descuento > 0) then
COSTO = COSTO - (COSTO * (v_descuento/100));
ALM = ID_ALMACEN;
SELECT
DESCRIPCION, ID_GRUPO
FROM
V_PRODUCTOS
WHERE (
(V_PRODUCTOS.CODIGO = :CODIGO) and
(V_PRODUCTOS.ID_PRESENTACION = :ID_PRESENTACION) and
(V_PRODUCTOS.ID_CARACTERISTICA = :ID_CARACTERISTICA)
)
INTO
:SNOMBREPRODUCTO, :ID_GRUPO;
SELECT DESCRIPCION
FROM GRUPOS
WHERE ID_GRUPO = :ID_GRUPO
INTO :SNOMBREGRUPO;
SELECT
DESCRIPCION
FROM
ALMACENES
WHERE ALMACENES.SUCURSAL = :SUCURSAL AND
ALMACENES.ID_ALMACEN = :ID_ALMACEN
INTO
:SNOMBREALMACENDESTINO;
SELECT
DESCRIPCION
FROM
ALMACENES
WHERE ALMACENES.SUCURSAL = :SUCURSAL AND
ALMACENES.ID_ALMACEN = :ALMACEN
INTO
:SNOMBREALMACEN;
SUBTOTAL = COSTO * CANTIDAD;
SUSPEND;
END
/*TRASPASOS Y DIRECTOS*/
FOR SELECT
MOVTOS1.FECHA,
MOVTOS1.ID_TIPOMOVTO,
MOVTOS1.ID_MOVTO,
MOVTOS1.REFERENCIA,
MOVTOS1.CLASEMOVTO,
MOVTOS2.COSTO,
MOVTOS2.CANTIDAD,
MOVTOS2.CODIGO as codigo,
MOVTOS1.id_almacendestino,
MOVTOS2.ID_PRESENTACION,
MOVTOS2.ID_CARACTERISTICA,
MOVTOS2.descuento,
MOVTOS1.id_almacen,
MOVTOS2.total,
MOVTOS2.impuestos,
MOVTOS1.id_movtorel
FROM
MOVTOS1
INNER JOIN MOVTOS2 ON (MOVTOS1.CLASEMOVTO = MOVTOS2.CLASEMOVTO) AND (MOVTOS1.ID_TIPOMOVTO = MOVTOS2.ID_TIPOMOVTO) AND (MOVTOS1.ID_MOVTO = MOVTOS2.ID_MOVTO) AND (MOVTOS1.SUCURSAL = MOVTOS2.SUCURSAL) AND (MOVTOS1.ID_ALMACEN = MOVTOS2.ID_ALMACEN)
INNER JOIN TIPOMOVTOS ON (MOVTOS1.ID_TIPOMOVTO = TIPOMOVTOS.ID_TIPOMOVTO) AND (MOVTOS1.CLASEMOVTO = TIPOMOVTOS.CLASEMOVTO)
WHERE
(MOVTOS1.SUCURSAL = :SUCURSAL) AND
((MOVTOS1.clasemovto = 'T') or (MOVTOS1.clasemovto = 'D'))AND
(MOVTOS1.id_almacendestino = :ALMACEN) AND
(MOVTOS1.STATUS<>99) AND
(TIPOMOVTOS.AFECTA_INVENTARIOS = 1) and
(MOVTOS1.fecha BETWEEN :FECHA1 AND :FECHA2)
INTO
:FECHA,
:ID_TIPOMOVTO,
:ID_MOVTO,
:REFERENCIA,
:CLASEMOVTO,
:COSTO,
:CANTIDAD,
:CODIGO,
:ID_ALMACEN_DESTINO,
:ID_PRESENTACION,
:ID_CARACTERISTICA,
:v_descuento,
:ID_ALMACEN,
:TOTAL,
:IMPUESTOS,
:ID_MOVTOREL
DO
BEGIN
if (v_descuento is null) then
v_descuento = 0;
if (v_descuento > 0) then
COSTO = COSTO - (COSTO * (v_descuento/100));
ALM = ID_ALMACEN_DESTINO;
SELECT DESCRIPCION, ID_GRUPO
FROM V_PRODUCTOS
WHERE (
(V_PRODUCTOS.CODIGO = :CODIGO) and
(V_PRODUCTOS.ID_PRESENTACION = :ID_PRESENTACION) and
(V_PRODUCTOS.ID_CARACTERISTICA = :ID_CARACTERISTICA)
)
INTO :SNOMBREPRODUCTO, :ID_GRUPO;
SELECT DESCRIPCION
FROM GRUPOS
WHERE ID_GRUPO = :ID_GRUPO
INTO :SNOMBREGRUPO;
SELECT
DESCRIPCION
FROM
ALMACENES
WHERE ALMACENES.SUCURSAL = :SUCURSAL AND
ALMACENES.ID_ALMACEN = :ID_ALMACEN_DESTINO
INTO
:SNOMBREALMACENDESTINO;
SELECT
DESCRIPCION
FROM
ALMACENES
WHERE ALMACENES.SUCURSAL = :SUCURSAL AND
ALMACENES.ID_ALMACEN = :ALMACEN
INTO
:SNOMBREALMACEN;
SUBTOTAL = COSTO * CANTIDAD;
SUSPEND;
END
END
agradeceria respuestas
CREATE PROCEDURE REPORTE_ENTRADAS_ALMACEN (
fecha1 date,
fecha2 date,
almacen integer,
sucursal integer)
returns (
codigo varchar(20),
id_presentacion integer,
id_caracteristica integer,
fecha date,
id_movto integer,
clasemovto varchar(1),
id_almacen_destino integer,
cantidad float,
costo float,
total float,
id_tipomovto integer,
referencia varchar(30),
snombreproducto varchar(81),
id_almacen integer,
alm integer,
snombrealmacendestino varchar(30),
snombrealmacen varchar(30),
impuestos float,
subtotal float,
id_grupo varchar(7),
snombregrupo varchar(80),
id_movtorel integer)
as
declare variable v_descuento integer;
BEGIN
/*ENTRADAS*/
FOR SELECT
MOVTOS1.FECHA,
MOVTOS1.ID_TIPOMOVTO,
MOVTOS1.ID_MOVTO,
MOVTOS1.REFERENCIA,
MOVTOS1.CLASEMOVTO,
MOVTOS2.COSTO,
MOVTOS2.CANTIDAD,
MOVTOS2.CODIGO as codigo,
MOVTOS1.id_almacendestino,
MOVTOS2.ID_PRESENTACION,
MOVTOS2.ID_CARACTERISTICA,
MOVTOS2.descuento,
MOVTOS1.id_almacen,
MOVTOS2.total,
MOVTOS2.impuestos,
MOVTOS1.id_movtorel
FROM
MOVTOS1
INNER JOIN MOVTOS2 ON (MOVTOS1.CLASEMOVTO = MOVTOS2.CLASEMOVTO) AND (MOVTOS1.ID_TIPOMOVTO = MOVTOS2.ID_TIPOMOVTO) AND (MOVTOS1.ID_MOVTO = MOVTOS2.ID_MOVTO) AND (MOVTOS1.SUCURSAL = MOVTOS2.SUCURSAL) AND (MOVTOS1.ID_ALMACEN = MOVTOS2.ID_ALMACEN)
INNER JOIN TIPOMOVTOS ON (MOVTOS1.ID_TIPOMOVTO = TIPOMOVTOS.ID_TIPOMOVTO) AND (MOVTOS1.CLASEMOVTO = TIPOMOVTOS.CLASEMOVTO)
WHERE
(MOVTOS1.SUCURSAL = :SUCURSAL) AND
((MOVTOS1.clasemovto = 'E') or (MOVTOS1.clasemovto = 'D')) AND
(MOVTOS1.ID_ALMACEN = :ALMACEN) AND
(MOVTOS1.STATUS<>99) AND
(TIPOMOVTOS.AFECTA_INVENTARIOS = 1) and
(MOVTOS1.fecha BETWEEN :FECHA1 AND :FECHA2)
INTO
:FECHA,
:ID_TIPOMOVTO,
:ID_MOVTO,
:REFERENCIA,
:CLASEMOVTO,
:COSTO,
:CANTIDAD,
:CODIGO,
:ID_ALMACEN_DESTINO,
:ID_PRESENTACION,
:ID_CARACTERISTICA,
:v_descuento,
:ID_ALMACEN,
:TOTAL,
:IMPUESTOS,
:ID_MOVTOREL
DO
BEGIN
if (v_descuento is null) then
v_descuento = 0;
if (v_descuento > 0) then
COSTO = COSTO - (COSTO * (v_descuento/100));
ALM = ID_ALMACEN;
SELECT
DESCRIPCION, ID_GRUPO
FROM
V_PRODUCTOS
WHERE (
(V_PRODUCTOS.CODIGO = :CODIGO) and
(V_PRODUCTOS.ID_PRESENTACION = :ID_PRESENTACION) and
(V_PRODUCTOS.ID_CARACTERISTICA = :ID_CARACTERISTICA)
)
INTO
:SNOMBREPRODUCTO, :ID_GRUPO;
SELECT DESCRIPCION
FROM GRUPOS
WHERE ID_GRUPO = :ID_GRUPO
INTO :SNOMBREGRUPO;
SELECT
DESCRIPCION
FROM
ALMACENES
WHERE ALMACENES.SUCURSAL = :SUCURSAL AND
ALMACENES.ID_ALMACEN = :ID_ALMACEN
INTO
:SNOMBREALMACENDESTINO;
SELECT
DESCRIPCION
FROM
ALMACENES
WHERE ALMACENES.SUCURSAL = :SUCURSAL AND
ALMACENES.ID_ALMACEN = :ALMACEN
INTO
:SNOMBREALMACEN;
SUBTOTAL = COSTO * CANTIDAD;
SUSPEND;
END
/*TRASPASOS Y DIRECTOS*/
FOR SELECT
MOVTOS1.FECHA,
MOVTOS1.ID_TIPOMOVTO,
MOVTOS1.ID_MOVTO,
MOVTOS1.REFERENCIA,
MOVTOS1.CLASEMOVTO,
MOVTOS2.COSTO,
MOVTOS2.CANTIDAD,
MOVTOS2.CODIGO as codigo,
MOVTOS1.id_almacendestino,
MOVTOS2.ID_PRESENTACION,
MOVTOS2.ID_CARACTERISTICA,
MOVTOS2.descuento,
MOVTOS1.id_almacen,
MOVTOS2.total,
MOVTOS2.impuestos,
MOVTOS1.id_movtorel
FROM
MOVTOS1
INNER JOIN MOVTOS2 ON (MOVTOS1.CLASEMOVTO = MOVTOS2.CLASEMOVTO) AND (MOVTOS1.ID_TIPOMOVTO = MOVTOS2.ID_TIPOMOVTO) AND (MOVTOS1.ID_MOVTO = MOVTOS2.ID_MOVTO) AND (MOVTOS1.SUCURSAL = MOVTOS2.SUCURSAL) AND (MOVTOS1.ID_ALMACEN = MOVTOS2.ID_ALMACEN)
INNER JOIN TIPOMOVTOS ON (MOVTOS1.ID_TIPOMOVTO = TIPOMOVTOS.ID_TIPOMOVTO) AND (MOVTOS1.CLASEMOVTO = TIPOMOVTOS.CLASEMOVTO)
WHERE
(MOVTOS1.SUCURSAL = :SUCURSAL) AND
((MOVTOS1.clasemovto = 'T') or (MOVTOS1.clasemovto = 'D'))AND
(MOVTOS1.id_almacendestino = :ALMACEN) AND
(MOVTOS1.STATUS<>99) AND
(TIPOMOVTOS.AFECTA_INVENTARIOS = 1) and
(MOVTOS1.fecha BETWEEN :FECHA1 AND :FECHA2)
INTO
:FECHA,
:ID_TIPOMOVTO,
:ID_MOVTO,
:REFERENCIA,
:CLASEMOVTO,
:COSTO,
:CANTIDAD,
:CODIGO,
:ID_ALMACEN_DESTINO,
:ID_PRESENTACION,
:ID_CARACTERISTICA,
:v_descuento,
:ID_ALMACEN,
:TOTAL,
:IMPUESTOS,
:ID_MOVTOREL
DO
BEGIN
if (v_descuento is null) then
v_descuento = 0;
if (v_descuento > 0) then
COSTO = COSTO - (COSTO * (v_descuento/100));
ALM = ID_ALMACEN_DESTINO;
SELECT DESCRIPCION, ID_GRUPO
FROM V_PRODUCTOS
WHERE (
(V_PRODUCTOS.CODIGO = :CODIGO) and
(V_PRODUCTOS.ID_PRESENTACION = :ID_PRESENTACION) and
(V_PRODUCTOS.ID_CARACTERISTICA = :ID_CARACTERISTICA)
)
INTO :SNOMBREPRODUCTO, :ID_GRUPO;
SELECT DESCRIPCION
FROM GRUPOS
WHERE ID_GRUPO = :ID_GRUPO
INTO :SNOMBREGRUPO;
SELECT
DESCRIPCION
FROM
ALMACENES
WHERE ALMACENES.SUCURSAL = :SUCURSAL AND
ALMACENES.ID_ALMACEN = :ID_ALMACEN_DESTINO
INTO
:SNOMBREALMACENDESTINO;
SELECT
DESCRIPCION
FROM
ALMACENES
WHERE ALMACENES.SUCURSAL = :SUCURSAL AND
ALMACENES.ID_ALMACEN = :ALMACEN
INTO
:SNOMBREALMACEN;
SUBTOTAL = COSTO * CANTIDAD;
SUSPEND;
END
END
agradeceria respuestas