
ejecutar funcion de usuario con parametros
Publicado por Oscar (3 intervenciones) el 17/12/2013 18:49:40
Amigos necesito ayuda, tengo las siguientes tablas
y la sigueinte funcion
quiero obtener un valor de acuerdo al basico de una serie de trabajadores para ello hice la funcion fn_basico y la funcion se ejecuta bien si lo llamo dbo.fn:basico( '0100007667552003')
pero si es de una lista tengo que hacer un procedimiento para recorrer cada registro y evaluar el dato,( con el valor obtenido debo hacer otras operaciones, motivo por el cual debo hacerlo uno a uno)
para ello creo un procedimiento en el cual parte del codigo es el siguiente
asi como esta me sale que no se puede convertir char a numerico, pero si lo cambi a select
me sale que debo declarar @cFormula
y como ve ya esta declarado,
¿Como debo hace par obtener un valor en nIngresos
que es lo que esta mal o como debo hacerlo para hacer este proceso
Mil gracias
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE [dbo].[CONCEPTOSFORMULA_DETALLE](
[IDFORMULA] [char](20) NULL,
[IDORDEN] [char](3) NULL,
[VARIABLE] [char](20) NULL,
[FORMULA] [char](254) NULL,
[COMENTARIO] [char](150) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[REMUNERACION](
[IDDESTAQUE] [nvarchar](16) NULL,
[FECHA] [datetime] NULL,
[IMPORTE] [numeric](12, 2) NULL
) ON [PRIMARY]
GO
INSERT INTO [NOMINA].[dbo].[CONCEPTOSFORMULA_DETALLE] ([IDFORMULA],[IDORDEN],[VARIABLE],[FORMULA] ,[COMENTARIO])
VALUES ('HRA_IMPORT','001','NA','FN_BASICO( @CIDDESTAQUE ) /240','')
INSERT INTO [NOMINA].[dbo].[REMUNERACION]([IDDESTAQUE],[FECHA],[IMPORTE])
VALUES('0100000820195004','2012-01-01 00:00:00.000', 1500.00)
y la sigueinte funcion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
create FUNCTION [dbo].[FN_BASICO]
(
@cIdDestaque varchar(16)
)
RETURNS NUMERIC(18,2)
AS
BEGIN
DECLARE @nvalor numeric(18,2)
SELECT @nvalor = importe
from dbo.remuneracion where iddestaque = @cIdDestaque order by fecha desc
RETURN @nvalor
END
quiero obtener un valor de acuerdo al basico de una serie de trabajadores para ello hice la funcion fn_basico y la funcion se ejecuta bien si lo llamo dbo.fn:basico( '0100007667552003')
pero si es de una lista tengo que hacer un procedimiento para recorrer cada registro y evaluar el dato,( con el valor obtenido debo hacer otras operaciones, motivo por el cual debo hacerlo uno a uno)
para ello creo un procedimiento en el cual parte del codigo es el siguiente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
USE NOMINA
DECLARE @_AF AS VARCHAR(1)
DECLARE @_HABMINIMO AS NUMERIC(12,2)
DECLARE @CfORMULA AS VARCHAR(150)
DECLARE @CIDFORMULA AS VARCHAR (50)
DECLARE @nIMPORTETRABAJADOR AS NUMERIC(12,2)
DECLARE @CIDDESTAQUE AS VARCHAR (16)
DECLARE @nIngresos as numeric(12,2)
SET @CIDFORMULA ='HRA_IMPORT'
SELECT @cFormula = RTRIM(FORMULA) FROM dbo.CONCEPTOSFORMULA_DETALLE WHERE IDFORMULA = @cIdFormula AND IDORDEN = '001'
PRINT @CFORMULA
SET @_AF='1'
SET @_HABMINIMO= 750
SET @CIDDESTAQUE ='0100000820195004'
--SELECT (DBO.FN_BASICO(@cIddestaque) + CASE @_AF WHEN '1' THEN @_HABMINIMO*0.10 ELSE 0 END ) /240
--set @CFORMULA = ' SELECT ' +( @CfORMULA)
Select @nIngresos = ( @cFormula)
select @nIngresos = @cFormula
print @cformula
print @nIngresos
--EXECUTE ( @cformula)
asi como esta me sale que no se puede convertir char a numerico, pero si lo cambi a select
me sale que debo declarar @cFormula
y como ve ya esta declarado,
¿Como debo hace par obtener un valor en nIngresos
que es lo que esta mal o como debo hacerlo para hacer este proceso
Mil gracias
Valora esta pregunta


0