SQL Server - ejecutar funcion de usuario con parametros

   
Vista:

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

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

ejecutar funcion de usuario con parametros

Publicado por Isaias (3186 intervenciones) el 17/12/2013 19:41:21
Pues no entiendo que pretendes hacer.

SELECT @nvalor = importe
from dbo.remuneracion where iddestaque = @cIdDestaque order by fecha desc

En esta instrucción, ¿Por qué hacer ORDER BY fecha desc, ¿acaso te da mas de 1 valor?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ejecutar funcion de usuario con parametros

Publicado por Oscar (3 intervenciones) el 17/12/2013 20:22:06
si ahí se guarda la remuneración del un trabajador y la ultima es la vigente , esto es para llevar un control de la variación del básico de un trabajador

Gracias por contestar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

ejecutar funcion de usuario con parametros

Publicado por Isaias (3186 intervenciones) el 19/12/2013 02:57:59
Entonces deberías utilizar MIN o MAX, no como lo estas codificando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar