Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema con funciones en sql server 2000

Estas en el tema de Problema con funciones en sql server 2000 en el foro de SQL Server en Foros del Web. Buenas tardes , espero puedan ayudarme por favor a resolver un problema con los parametros de una funcion. Mi funcion es esta: CREATE FUNCTION dbo.IIF(@condic ...
  #1 (permalink)  
Antiguo 02/09/2010, 12:31
 
Fecha de Ingreso: febrero-2010
Mensajes: 11
Antigüedad: 14 años, 2 meses
Puntos: 0
Problema con funciones en sql server 2000

Buenas tardes , espero puedan ayudarme por favor a resolver un problema con los parametros de una funcion.

Mi funcion es esta:

CREATE FUNCTION dbo.IIF(@condic bit, @val1 sql_variant,@val2 sql_variant)

RETURNS sql_variant AS

BEGIN
declare @retorno as sql_variant

if @condic = 1
begin
select @retorno = @val1
end
else
begin
select @retorno = @val2
end
return @retorno
END


************************************************** *****

cuando llamo la funcion

select dbo.IIF(1 , 'valor1' , valor2)
retorna valor1 (funciona)

si la llamo de esta forma:

select dbo.IIF(0 , 'valor1' , valor2)
retorna valor2 (funciona)

es decir si paso el primer parametro ya convertido (0 o 1) funciona

pero si lo paso en forma de expresion

select dbo.IIF(10<4 , 'valor1' , valor2)
deberia convertir la expresion 10<4 y retornar un valor bit (0).....

en resumen sql server 2000 convierte un parametro en expresion logica retornando un valor tipo bit ?????

Gracias por cualquier ayuda , de verdad que no pude solventarlo .....
  #2 (permalink)  
Antiguo 02/09/2010, 14:48
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con funciones en sql server 2000

Buenas tardes programmer_81, en primer lugar una pregunta ¿por qué necesitas programar una función que para hacer un IF? ¿no te es suficiente utilizar la función CASE WHEN así?

Código SQL:
Ver original
  1. SELECT CASE WHEN 10<14 THEN 'valor1' ELSE 'valor2' END

Si quieres necesitas forzosamente hacer uso de tu función, entonces deberás hacer lo siguiente para poder enviarle los parámetros:

Código SQL:
Ver original
  1. SELECT dbo.IIF(CASE WHEN 10<4 THEN 1 ELSE 0 END, 'valor1' , 'valor2')

Saludos
Leo
  #3 (permalink)  
Antiguo 02/09/2010, 14:55
 
Fecha de Ingreso: febrero-2010
Mensajes: 11
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Problema con funciones en sql server 2000

gracias leo.

te cuento , estamos migrando de base de datos de fox pro a sql server 2000 y tenemos un sistema donde se utiliza IIF que existe en fox pero no en sql , estamos creando la funcion IIF en sql para no modificar tanto porq existen muchisimos iif......

espero me hayas entendido ...

gracias leo
  #4 (permalink)  
Antiguo 02/09/2010, 14:59
 
Fecha de Ingreso: febrero-2010
Mensajes: 11
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Problema con funciones en sql server 2000

cito un ejemplo :

select dbo.IIF(datediff(day,fecha_x,fecha_y) > 0 , 'valor 1 ' , 'valor 2')

Esta funcion es de fox pro quiero definir esta funcion para que exista en sql y corra tranquilamente donde la encuentre sin necesidad de hacer tantos case when...

Mil gracias
  #5 (permalink)  
Antiguo 02/09/2010, 15:08
 
Fecha de Ingreso: febrero-2010
Mensajes: 11
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Problema con funciones en sql server 2000

estoy probando y te digo si funciono bien en el sistema....

Etiquetas: funciones, server, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:23.