![]() |
Usar IIF en check
Hola, miembros del foro.
Pues tengo una pregunta acerca de utilizar iif() dentro de una restriccion check algo como: constraint CK_UseKardex check(iif(UseKardex=1, TipoKardex is not null, TipoKardex is null)) Pues que estoy migrando desde otro Gestor de BD. a Firebird con docenas de iif() como estas pero no me funciona. Hay alguna manera de hacer esto en firebird?. Gracias de anticipadas por sus repuestas :). |
Hola
IIF() lo acepta Firebird, pero creo que solo dentro de un sql. Saludos |
Gracias Caral.
Pero me preguntaba si existe alguna manera de lograr el mismo objetivo dentro del check en Firebird? claro con otras funciones que permita firebird. |
Hola
No se o no conozco el check, no lo he usado. Saludos PD: es pregunta para conocedores.... |
Hola
Estaba revisando aqui para tratar de entender esto y segun entiendo lo que hace check es devolver un valor null segun el caso. Da la impresion, o por lo menos a mi me parece que hace algo similar al IFF, solo que creando una sola condicion de retorno. Lo que no entiendo es: Si es asi; por que no usar el IFF directamente ?. Solo me auto pregunto ?. Saludos |
Bueno Caral, lo que hace el check es validar una condicion logica Check(<condicion>) y hasta antes de la versión 2.0 de Firebird si la condicion se evaluaba a NULL se tomaba como False pero a partir de esta (la 2.0) se evalua a True
Cita:
La ventaja de la de la funcion IIF es que permite hacer validaciones anidadas mas complejas y mas entedibles que si la hicieramos sin ella, pero si no hay forma de utilizar IIF o algo similar tendre que hacerlo a mano. |
Dudas respecto a lo quieres hacer ...
Carlos:
:confused: Pues no entiendo bien a bien que es lo que quieres hacer en el check (no entiendo tu ejemplo), pero yo he utilizado el iif muy a menudo. Te pongo un par de ejemplos: En un campo calculado:
Dentro de un procedimiento almacenado:
Espero que te ayude mi código ... Saludos, Gerardo Suárez Trejo |
Gracias por las repuestas :).
Cita:
condicion: UseKardex es = 1 Si es Verdadero: obligar el ingreso para el campo TipoKardex Si es Falso: impedir que se ingrese informacion en el campo TipoKardex. Soy nuevo en Firebird y habia creado todo mi script SQL de BD, usando checks comprobaciones a nivel de tabla con funciones IIF (pensaba que si se podia :( ) pero al probarlo no funciono, como decia CARAL no funcioma en checks, al parecer solo hay 2 opciones. 1.- Uso los Procedimientos almacenado, aunque mejor los triggers como sugiere GalloSuarez donde si puedo usar los IIFs. 2.- o sustituir los IIF por condiciones AND y OR, traduciendo el ejemplo seria: CHECK((UseKardex=1 AND TipoKardex is not null) or (UseKardex=0 AND TipoKardex is null)). Gracias por las respuestas, tengo que corregir mi script SQL, cometiendo fallas se aprende :). |
La franja horaria es GMT +2. Ahora son las 06:29:57. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi