¿Aplicar funcion de multiples valores en un Select en SQL Server?
Publicado por Jaze P. (5 intervenciones) el 11/07/2013 23:14:49
Tengo este proceso pero en 4 funciones que al aplicarla en un select si funciona validado y probado, pero por no quere tener almancenadas muchas funciones estoy intentando crear una funcion que aloje estas 4, pero si me la acepta y guarda la funcione pero no he podido aplicarla en un select ya que como que no me deja aplicar mas valores en el select de la funciona.
++++++++++++++++++++++++++++++++++++++…
CODIGO DE LA FUNCION ALMACENADA:
++++++++++++++++++++++++++++++++++++++…
ALTER FUNCTION [dbo].[JAPF_ServiceAll] ((@CP varchar(60))
RETURNS int
AS
BEGIN
DECLARE @Tipo smallint
/**************Seleccionando Numero 1********************/
IF @Tipo = 1
-- Add the T-SQL statements to compute the return value here
SET @CP = (
SELECT CASE
WHEN @CP LIKE ('%/%')
THEN
(SELECT dbo.JAPF_FnSplit(@CP,'/',1))
ELSE
@CP
END
)
/**************Seleccionando Numero 2********************/
ELSE IF @Tipo = 2
SET @CP = (
SELECT CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',2)) IS NULL
THEN
CASE
WHEN @CP LIKE ('%/%')
THEN
(SELECT dbo.JAPF_FnSplit(@CP,'/',1))
ELSE
@CP
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',2))
END
)
/**************Seleccionando Numero 3********************/
ELSE IF @Tipo = 3
SET @CP = (
SELECT CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',3)) IS NULL
THEN
CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',2)) IS NULL
THEN
CASE
WHEN @CP LIKE ('%/%')
THEN
(SELECT dbo.JAPF_FnSplit(@CP,'/',1))
ELSE
@CP
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',2))
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',3))
END
)
/**************Seleccionando Numero 4********************/
ELSE IF @Tipo = 4
SET @CP = (
SELECT CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',4)) IS NULL
THEN
CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',3)) IS NULL
THEN
CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',2)) IS NULL
THEN
CASE
WHEN @CP LIKE ('%/%')
THEN
(SELECT dbo.JAPF_FnSplit(@CP,'/',1))
ELSE
@CP
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',2))
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',3))
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',4))
END
)
/*************************************…
-- Return the result of the function
RETURN (@CP)
END
++++++++++++++++++++++++++++++++++++++…
Aqui con el IF intento hacer que al seleccionar algun numero o opcion ya especificado en la funcion me corra el proceso que corresponde, en un select intente poner:
Al poner por ejemplo
dbo.JAPF_ServiceAll
(dbo.JerarquiaTipoServicio
(servicio.cvetiposervicio(1)),
donde (1) aqui especifico el numero de opcion que quiero que corra de la FUCTION pero marca error
intente ponerla tambien asi:
dbo.JAPF_ServiceAll(1)
(dbo.JerarquiaTipoServicio
(servicio.cvetiposervicio),
dbo.JAPF_ServiceAll
(dbo.JerarquiaTipoServicio
(servicio.cvetiposervicio)1),
dbo.JAPF_ServiceAll
(dbo.JerarquiaTipoServicio
(servicio.cvetiposervicio)(1),
y tampoco funciona, pero lo que si funciona es si lo pongo de esta forma:
dbo.JAPF_ServiceAll(1),
Pero este me arroja el campo vacio por que no le especifico en que campo quiero que corra la funcion.
Y esta otra:
(SELECT dbo.JerarquiaTipoServicio
(servicio.cvetiposervicio)),
Osea poniendolos separados si jala, pero no se como unirlos y poder especificar la opcion de 1 al 4 del IF para que haga el proceso que necesito.
Tienen alguna idea de como hacerlo o como poderlo juntar, no importa si la solcion es quitando el IF y utilizando alguna alternativa...
Ya que quiero realizar esto, ya que si lo dejo todo en un selec si me muestra la informacion que quiero, pero se ve demasiado revuelto el SELECT que quienes lo utilizaran o utilizaramos se vera mucho o revuelto y quiero que a simple vista se vea sencillo y lo mas laborioso se quede en las funciones almacenadas del SQL.
++++++++++++++++++++++++++++++++++++++…
CODIGO DE LA FUNCION ALMACENADA:
++++++++++++++++++++++++++++++++++++++…
ALTER FUNCTION [dbo].[JAPF_ServiceAll] ((@CP varchar(60))
RETURNS int
AS
BEGIN
DECLARE @Tipo smallint
/**************Seleccionando Numero 1********************/
IF @Tipo = 1
-- Add the T-SQL statements to compute the return value here
SET @CP = (
SELECT CASE
WHEN @CP LIKE ('%/%')
THEN
(SELECT dbo.JAPF_FnSplit(@CP,'/',1))
ELSE
@CP
END
)
/**************Seleccionando Numero 2********************/
ELSE IF @Tipo = 2
SET @CP = (
SELECT CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',2)) IS NULL
THEN
CASE
WHEN @CP LIKE ('%/%')
THEN
(SELECT dbo.JAPF_FnSplit(@CP,'/',1))
ELSE
@CP
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',2))
END
)
/**************Seleccionando Numero 3********************/
ELSE IF @Tipo = 3
SET @CP = (
SELECT CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',3)) IS NULL
THEN
CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',2)) IS NULL
THEN
CASE
WHEN @CP LIKE ('%/%')
THEN
(SELECT dbo.JAPF_FnSplit(@CP,'/',1))
ELSE
@CP
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',2))
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',3))
END
)
/**************Seleccionando Numero 4********************/
ELSE IF @Tipo = 4
SET @CP = (
SELECT CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',4)) IS NULL
THEN
CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',3)) IS NULL
THEN
CASE
WHEN (SELECT dbo.JAPF_FnSplit(@CP,'/',2)) IS NULL
THEN
CASE
WHEN @CP LIKE ('%/%')
THEN
(SELECT dbo.JAPF_FnSplit(@CP,'/',1))
ELSE
@CP
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',2))
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',3))
END
ELSE
(SELECT dbo.JAPF_FnSplit(@CP,'/',4))
END
)
/*************************************…
-- Return the result of the function
RETURN (@CP)
END
++++++++++++++++++++++++++++++++++++++…
Aqui con el IF intento hacer que al seleccionar algun numero o opcion ya especificado en la funcion me corra el proceso que corresponde, en un select intente poner:
Al poner por ejemplo
dbo.JAPF_ServiceAll
(dbo.JerarquiaTipoServicio
(servicio.cvetiposervicio(1)),
donde (1) aqui especifico el numero de opcion que quiero que corra de la FUCTION pero marca error
intente ponerla tambien asi:
dbo.JAPF_ServiceAll(1)
(dbo.JerarquiaTipoServicio
(servicio.cvetiposervicio),
dbo.JAPF_ServiceAll
(dbo.JerarquiaTipoServicio
(servicio.cvetiposervicio)1),
dbo.JAPF_ServiceAll
(dbo.JerarquiaTipoServicio
(servicio.cvetiposervicio)(1),
y tampoco funciona, pero lo que si funciona es si lo pongo de esta forma:
dbo.JAPF_ServiceAll(1),
Pero este me arroja el campo vacio por que no le especifico en que campo quiero que corra la funcion.
Y esta otra:
(SELECT dbo.JerarquiaTipoServicio
(servicio.cvetiposervicio)),
Osea poniendolos separados si jala, pero no se como unirlos y poder especificar la opcion de 1 al 4 del IF para que haga el proceso que necesito.
Tienen alguna idea de como hacerlo o como poderlo juntar, no importa si la solcion es quitando el IF y utilizando alguna alternativa...
Ya que quiero realizar esto, ya que si lo dejo todo en un selec si me muestra la informacion que quiero, pero se ve demasiado revuelto el SELECT que quienes lo utilizaran o utilizaramos se vera mucho o revuelto y quiero que a simple vista se vea sencillo y lo mas laborioso se quede en las funciones almacenadas del SQL.
Valora esta pregunta


0