SQL Server - ejecutar funcion de usuario con parametros

 
Vista:
sin imagen de perfil

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
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

ejecutar funcion de usuario con parametros

Publicado por Isaias (4558 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
sin imagen de perfil

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
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

ejecutar funcion de usuario con parametros

Publicado por Isaias (4558 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