Aplicacion de reglas o restricciones

29/10/2005 - 20:27 por Jose Luis | Informe spam
Hola lista,

Mi problema es el siguiente, tengo que aplicar unas reglas a ciertos campos
de una tabla pero solo para ciertos valores, me explico mejor:

Tabla1
Campo1, Campo2, Campo 3, Campo4
10027 0 -10 20
20020 -15 -20 30

Entonces lo que deseo hacer, es lo siguiente:

Que si el Campo1 comienza con 1 entonces se aplique una regla o restriccion
que haga lo siguiente, que en los campos 2, 3 y 4 ya no se ingresen mas
negativos de alli en adelante.
En cambio que si el Campo 1 comienza con 2 entonces que si continue
ingresandose negativos en los campos 2, 3 y 4.

Espero haber sido claro.

Saludos

Preguntas similare

Leer las respuestas

#1 Maxi [MVP SQL Server]
29/10/2005 - 20:58 | Informe spam
Hola, podrias armar una funcion definida por el usuario la cual tenga esta
regla


[Microsoft MVP SQL SERVER]
Culminis SQL-Server Speakers (http://latam.culminis.com)

Maxi - Buenos Aires - Argentina
Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Jose Luis" escribió en el mensaje
news:
Hola lista,

Mi problema es el siguiente, tengo que aplicar unas reglas a ciertos
campos
de una tabla pero solo para ciertos valores, me explico mejor:

Tabla1
Campo1, Campo2, Campo 3, Campo4
10027 0 -10 20
20020 -15 -20 30

Entonces lo que deseo hacer, es lo siguiente:

Que si el Campo1 comienza con 1 entonces se aplique una regla o
restriccion
que haga lo siguiente, que en los campos 2, 3 y 4 ya no se ingresen mas
negativos de alli en adelante.
En cambio que si el Campo 1 comienza con 2 entonces que si continue
ingresandose negativos en los campos 2, 3 y 4.

Espero haber sido claro.

Saludos


Respuesta Responder a este mensaje
#2 Jose Luis
29/10/2005 - 21:11 | Informe spam
Disculpa Maxi, me podrias quizas dar un pequeño ejemplo para poderlo hacer.

esto lo tendria que hacer mediante una restriccion y no una regla no???

Saludos
"Maxi [MVP SQL Server]" escribió en el
mensaje news:%
Hola, podrias armar una funcion definida por el usuario la cual tenga esta
regla


[Microsoft MVP SQL SERVER]
Culminis SQL-Server Speakers (http://latam.culminis.com)

Maxi - Buenos Aires - Argentina
Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Jose Luis" escribió en el mensaje
news:
> Hola lista,
>
> Mi problema es el siguiente, tengo que aplicar unas reglas a ciertos
> campos
> de una tabla pero solo para ciertos valores, me explico mejor:
>
> Tabla1
> Campo1, Campo2, Campo 3, Campo4
> 10027 0 -10 20
> 20020 -15 -20 30
>
> Entonces lo que deseo hacer, es lo siguiente:
>
> Que si el Campo1 comienza con 1 entonces se aplique una regla o
> restriccion
> que haga lo siguiente, que en los campos 2, 3 y 4 ya no se ingresen mas
> negativos de alli en adelante.
> En cambio que si el Campo 1 comienza con 2 entonces que si continue
> ingresandose negativos en los campos 2, 3 y 4.
>
> Espero haber sido claro.
>
> Saludos
>
>


Respuesta Responder a este mensaje
#3 Alejandro Mesa
31/10/2005 - 15:11 | Informe spam
Jose Luis,

Pudieras ser un poco mas explicito con este problema?

- Que debe pasar cuando se intenta insertar un valor negativo en las
columnas c2, c3 y c4 cuando el primer digito de c1 es igual a 1, abortar la
insercion, transformar los valores a positivos (como en el ejemplo expuesto
por Miguel)?

- En el ejemplo que expusistes se debe dejar insertar el valor -10 en la
columna c3 o se debe rechazar esa fila?

Dependiendo de lo que quieras hacer, pudieras usar diferentes herramientas.
Casi siempre este tipo de restricciones se pueden implementar usando un
restriccion "check", lo ouedes hacer a nivel de columna se la restriccion no
referencia otras columnas de la tabla o la puedes implementar a nivel de
tabla si esta involucra otras columnas. Tambien puedes usar un trigger, pero
si en este abortas la transaccion, entonces ninguna fila del batch sera
insertada, al contrario de usar una restriccion "check" donde solamente se
rechaza la fila que no cumple con la restriccion. Tambien puedes usar una
funcion de usuario, recurso que suelo dejar de ultimo por la carga que
adiciona al proceso de insercion.

Ejemplo:

use northwind
go

create table t1 (
c1 int not null,
c2 int not null,
c3 int not null,
c4 int not null,
constraint chk_c1_c2_c3_c4 check (
case when left(c1, 1) = 1 then case when (isnull(nullif(sign(c2), 0), 1) *
isnull(nullif(sign(c3), 0), 1) * isnull(nullif(sign(c4), 0), 1)) < 0 then 1
else 0 end else 0 end = 0
)
)
go

insert into t1 values(10027, 0, -10, 20)
insert into t1 values(20020, -15, -20, 30)
go

select * from t1
go

drop table t1
go


AMB

"Jose Luis" wrote:

Hola lista,

Mi problema es el siguiente, tengo que aplicar unas reglas a ciertos campos
de una tabla pero solo para ciertos valores, me explico mejor:

Tabla1
Campo1, Campo2, Campo 3, Campo4
10027 0 -10 20
20020 -15 -20 30

Entonces lo que deseo hacer, es lo siguiente:

Que si el Campo1 comienza con 1 entonces se aplique una regla o restriccion
que haga lo siguiente, que en los campos 2, 3 y 4 ya no se ingresen mas
negativos de alli en adelante.
En cambio que si el Campo 1 comienza con 2 entonces que si continue
ingresandose negativos en los campos 2, 3 y 4.

Espero haber sido claro.

Saludos



Respuesta Responder a este mensaje
#4 Jose Luis
31/10/2005 - 20:58 | Informe spam
Hola con todos,
Bueno quizas no me explique bien, esta ves espero hacerlo mejor.

Tengo una tabla Tabla1, con los siguientes campos: Campo1, Campo2, Campo3 y
Campo4, hasta la fecha se han venido ingresando en los Campos2, Campo3 y
Campo4 cantidades negativas, a partir de la fecha ya no se desea ello, es
decir que a partir de la fecha en los Campo2, Campo3, Campo4 se ingresen
solo cantidades positivas, muy al margen que asi se las envien del
aplicativo (no se desean realizar ningun tipo de conversiones como volver
positivo), la condicion es la siguiente: que en el Campo1 el valor del
registro comienza con 1, este tipo de restriccion este habilitada, es decir
no se ingresen negativos, en el caso de que el valor comienze con 2, no haga
uso de esta opcion, es decir que si se le envia un negativo lo deje ingresar
sin problema.

Saludos y gracias por su tiempo, espero haber sido claro.

PD. Esta tipo de manejo de informacion solo deberia de estar habilitada para
los datos que sean nuevos y no se debe de aplicar a los datos antiguos.

"Alejandro Mesa" escribió en el
mensaje news:
Jose Luis,

Pudieras ser un poco mas explicito con este problema?

- Que debe pasar cuando se intenta insertar un valor negativo en las
columnas c2, c3 y c4 cuando el primer digito de c1 es igual a 1, abortar


la
insercion, transformar los valores a positivos (como en el ejemplo


expuesto
por Miguel)?

- En el ejemplo que expusistes se debe dejar insertar el valor -10 en la
columna c3 o se debe rechazar esa fila?

Dependiendo de lo que quieras hacer, pudieras usar diferentes


herramientas.
Casi siempre este tipo de restricciones se pueden implementar usando un
restriccion "check", lo ouedes hacer a nivel de columna se la restriccion


no
referencia otras columnas de la tabla o la puedes implementar a nivel de
tabla si esta involucra otras columnas. Tambien puedes usar un trigger,


pero
si en este abortas la transaccion, entonces ninguna fila del batch sera
insertada, al contrario de usar una restriccion "check" donde solamente se
rechaza la fila que no cumple con la restriccion. Tambien puedes usar una
funcion de usuario, recurso que suelo dejar de ultimo por la carga que
adiciona al proceso de insercion.

Ejemplo:

use northwind
go

create table t1 (
c1 int not null,
c2 int not null,
c3 int not null,
c4 int not null,
constraint chk_c1_c2_c3_c4 check (
case when left(c1, 1) = 1 then case when (isnull(nullif(sign(c2), 0), 1) *
isnull(nullif(sign(c3), 0), 1) * isnull(nullif(sign(c4), 0), 1)) < 0 then


1
else 0 end else 0 end = 0
)
)
go

insert into t1 values(10027, 0, -10, 20)
insert into t1 values(20020, -15, -20, 30)
go

select * from t1
go

drop table t1
go


AMB

"Jose Luis" wrote:

> Hola lista,
>
> Mi problema es el siguiente, tengo que aplicar unas reglas a ciertos


campos
> de una tabla pero solo para ciertos valores, me explico mejor:
>
> Tabla1
> Campo1, Campo2, Campo 3, Campo4
> 10027 0 -10 20
> 20020 -15 -20 30
>
> Entonces lo que deseo hacer, es lo siguiente:
>
> Que si el Campo1 comienza con 1 entonces se aplique una regla o


restriccion
> que haga lo siguiente, que en los campos 2, 3 y 4 ya no se ingresen mas
> negativos de alli en adelante.
> En cambio que si el Campo 1 comienza con 2 entonces que si continue
> ingresandose negativos en los campos 2, 3 y 4.
>
> Espero haber sido claro.
>
> Saludos
>
>
>
Respuesta Responder a este mensaje
#5 Alejandro Mesa
31/10/2005 - 22:51 | Informe spam
Jose Luis,

Pues entonces puedes usar el script que adjunte anteriormente como guia.
Solo debes alterar la tabla y adicionar la restriccion "check" con la opcion
"nocheck".

Ejemplo:

use northwind
go

create table t1 (
c1 int not null,
c2 int not null,
c3 int not null,
c4 int not null,
)
go

insert into t1 values(10027, 0, -10, 20)
go

alter table t1
with nocheck
add constraint chk_c1_c2_c3_c4 check (
case when left(c1, 1) = 1 then case when (isnull(nullif(sign(c2), 0), 1) *
isnull(nullif(sign(c3), 0), 1) * isnull(nullif(sign(c4), 0), 1)) < 0 then 1
else 0 end else 0 end = 0
)
go

insert into t1 values(10027, 0, 10, -20)
go

insert into t1 values(20020, -15, -20, 30)
go

select * from t1
go

drop table t1
go


AMB

"Jose Luis" wrote:

Hola con todos,
Bueno quizas no me explique bien, esta ves espero hacerlo mejor.

Tengo una tabla Tabla1, con los siguientes campos: Campo1, Campo2, Campo3 y
Campo4, hasta la fecha se han venido ingresando en los Campos2, Campo3 y
Campo4 cantidades negativas, a partir de la fecha ya no se desea ello, es
decir que a partir de la fecha en los Campo2, Campo3, Campo4 se ingresen
solo cantidades positivas, muy al margen que asi se las envien del
aplicativo (no se desean realizar ningun tipo de conversiones como volver
positivo), la condicion es la siguiente: que en el Campo1 el valor del
registro comienza con 1, este tipo de restriccion este habilitada, es decir
no se ingresen negativos, en el caso de que el valor comienze con 2, no haga
uso de esta opcion, es decir que si se le envia un negativo lo deje ingresar
sin problema.

Saludos y gracias por su tiempo, espero haber sido claro.

PD. Esta tipo de manejo de informacion solo deberia de estar habilitada para
los datos que sean nuevos y no se debe de aplicar a los datos antiguos.

"Alejandro Mesa" escribió en el
mensaje news:
> Jose Luis,
>
> Pudieras ser un poco mas explicito con este problema?
>
> - Que debe pasar cuando se intenta insertar un valor negativo en las
> columnas c2, c3 y c4 cuando el primer digito de c1 es igual a 1, abortar
la
> insercion, transformar los valores a positivos (como en el ejemplo
expuesto
> por Miguel)?
>
> - En el ejemplo que expusistes se debe dejar insertar el valor -10 en la
> columna c3 o se debe rechazar esa fila?
>
> Dependiendo de lo que quieras hacer, pudieras usar diferentes
herramientas.
> Casi siempre este tipo de restricciones se pueden implementar usando un
> restriccion "check", lo ouedes hacer a nivel de columna se la restriccion
no
> referencia otras columnas de la tabla o la puedes implementar a nivel de
> tabla si esta involucra otras columnas. Tambien puedes usar un trigger,
pero
> si en este abortas la transaccion, entonces ninguna fila del batch sera
> insertada, al contrario de usar una restriccion "check" donde solamente se
> rechaza la fila que no cumple con la restriccion. Tambien puedes usar una
> funcion de usuario, recurso que suelo dejar de ultimo por la carga que
> adiciona al proceso de insercion.
>
> Ejemplo:
>
> use northwind
> go
>
> create table t1 (
> c1 int not null,
> c2 int not null,
> c3 int not null,
> c4 int not null,
> constraint chk_c1_c2_c3_c4 check (
> case when left(c1, 1) = 1 then case when (isnull(nullif(sign(c2), 0), 1) *
> isnull(nullif(sign(c3), 0), 1) * isnull(nullif(sign(c4), 0), 1)) < 0 then
1
> else 0 end else 0 end = 0
> )
> )
> go
>
> insert into t1 values(10027, 0, -10, 20)
> insert into t1 values(20020, -15, -20, 30)
> go
>
> select * from t1
> go
>
> drop table t1
> go
>
>
> AMB
>
> "Jose Luis" wrote:
>
> > Hola lista,
> >
> > Mi problema es el siguiente, tengo que aplicar unas reglas a ciertos
campos
> > de una tabla pero solo para ciertos valores, me explico mejor:
> >
> > Tabla1
> > Campo1, Campo2, Campo 3, Campo4
> > 10027 0 -10 20
> > 20020 -15 -20 30
> >
> > Entonces lo que deseo hacer, es lo siguiente:
> >
> > Que si el Campo1 comienza con 1 entonces se aplique una regla o
restriccion
> > que haga lo siguiente, que en los campos 2, 3 y 4 ya no se ingresen mas
> > negativos de alli en adelante.
> > En cambio que si el Campo 1 comienza con 2 entonces que si continue
> > ingresandose negativos en los campos 2, 3 y 4.
> >
> > Espero haber sido claro.
> >
> > Saludos
> >
> >
> >



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida