tema enviado por Maurito22 en SQL Server
tema iniciado el 26/02/2008
Buenas a todos,
Tengo un SP que creé para correr una query de referencias cruzadas, que me sirve para mostrar datos en un sitio ASP.NET.
Pero el SP me tira errores por todos lados.
Los mensajes de errores son la mayoría así: "Must declare the variable '@xxxx'
Pero yo declaro las variables al inicio. No se donde puedo estar fallando, no soy experto en SP ni mucho menos.
Les pongo un pedazo del SP donde hay conflictos:
CREATE PROCEDURE sp_Totales
(
@nombre nvarchar(50),
@periodo nvarchar(50),
@fini nvarchar(50),
@ffin nvarchar (50)
)
AS
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb_temp1]') and OBJECTPROPERTY(id, N'IsTable') = 1)
drop table [dbo].[tb_temp1]
GO
CREATE TABLE tb_temp1 (Nombre varchar(50) NOT NULL, Tipo varchar(50) NOT NULL, Saldo decimal(6,2) NOT NULL)
GO
if @nombre = 'Todos'
if @periodo = 'Ultimo Mes'
INSERT INTO tb_temp1 (Nombre, Tipo, Saldo)
SELECT tb_usuarios.Nombre, tb_tipos.Tipo As Tipo_Saldo, sum(tb_almacen.TotalTiempo) As Saldo
FROM (tb_almacen INNER JOIN tb_usuarios ON CodUsuario = IDUsuario) INNER JOIN tb_tipos ON tb_almacen.CodTipo = tb_tipos.IDTipo
WHERE tb_almacen.Mes = MONTH(GETDATE())
GROUP BY tb_usuarios.Nombre, tb_tipos.Tipo
ORDER BY tb_usuarios.Nombre Asc
else
if @periodo = 'Seleccionar'
INSERT INTO tb_temp1 (Nombre, Tipo, Saldo)
SELECT tb_usuarios.Nombre, tb_tipos.Tipo As Tipo_Saldo, sum(tb_almacen.TotalTiempo) As Saldo
FROM (tb_almacen INNER JOIN tb_usuarios ON CodUsuario = IDUsuario) INNER JOIN tb_tipos ON tb_almacen.CodTipo = tb_tipos.IDTipo
WHERE tb_almacen.Fecha BETWEEN convert(datetime, @fini, 103) AND convert(datetime, @ffin, 103)
GROUP BY tb_usuarios.Nombre, tb_tipos.Tipo
ORDER BY tb_usuarios.Nombre Asc
else
INSERT INTO tb_temp1 (Nombre, Tipo, Saldo)
SELECT tb_usuarios.Nombre, tb_tipos.Tipo As Tipo_Saldo, sum(tb_almacen.TotalTiempo) As Saldo
FROM (tb_almacen INNER JOIN tb_usuarios ON CodUsuario = IDUsuario) INNER JOIN tb_tipos ON tb_almacen.CodTipo = tb_tipos.IDTipo
GROUP BY tb_usuarios.Nombre, tb_tipos.Tipo
ORDER BY tb_usuarios.Nombre Asc
else
if @periodo = 'Ultimo Mes'
INSERT INTO tb_temp1 (Nombre, Tipo, Saldo)
SELECT tb_usuarios.Nombre, tb_tipos.Tipo As Tipo_Saldo, sum(tb_almacen.TotalTiempo) As Saldo
FROM (tb_almacen INNER JOIN tb_usuarios ON CodUsuario = IDUsuario) INNER JOIN tb_tipos ON tb_almacen.CodTipo = tb_tipos.IDTipo
WHERE tb_usuarios.Nombre = @nombre AND tb_almacen.Mes = MONTH(GETDATE())
GROUP BY tb_usuarios.Nombre, tb_tipos.Tipo
ORDER BY tb_usuarios.Nombre Asc
else
if @periodo = 'Seleccionar'
INSERT INTO tb_temp1 (Nombre, Tipo, Saldo)
SELECT tb_usuarios.Nombre, tb_tipos.Tipo As Tipo_Saldo, sum(tb_almacen.TotalTiempo) As Saldo
FROM (tb_almacen INNER JOIN tb_usuarios ON CodUsuario = IDUsuario) INNER JOIN tb_tipos ON tb_almacen.CodTipo = tb_tipos.IDTipo
WHERE tb_usuarios.Nombre = @nombre AND tb_almacen.Fecha BETWEEN convert(datetime, @fini, 103) AND convert(datetime, @ffin, 103)
GROUP BY tb_usuarios.Nombre, tb_tipos.Tipo
ORDER BY tb_usuarios.Nombre Asc
else
INSERT INTO tb_temp1 (Nombre, Tipo, Saldo)
SELECT tb_usuarios.Nombre, tb_tipos.Tipo As Tipo_Saldo, sum(tb_almacen.TotalTiempo) As Saldo
FROM (tb_almacen INNER JOIN tb_usuarios ON CodUsuario = IDUsuario) INNER JOIN tb_tipos ON tb_almacen.CodTipo = tb_tipos.IDTipo
WHERE tb_usuarios.Nombre = @nombre
GROUP BY tb_usuarios.Nombre, tb_tipos.Tipo
ORDER BY tb_usuarios.Nombre Asc
Estoy seguro que los if anidados estan incorrectos al usar los parametros que declare.
Podrian ayudarme??
Muchas gracias,
Mauro