Relación de tablas

08/06/2006 - 16:33 por María Eugenia Ryan | Informe spam
Hola a todos, tengo una tabla RECIBOS con los siguientes campos:

Id_Tipo_Rec (Integer) (clave)
Num_Rec (Integer) (clave)
...

Y, además tengo la tabla APORTES con los siguientes campos:

Id_Aporte (clave)

Id_Tipo_Rec
Num_Rec
Donde Id_Tipo_Rec y Num_Rec no son obligatorios.

O sea las dos tabla se relacionan con los campos Id_Tipo_Rec, Num_Rec.
El problema es que, en la tabla APORTES, si ingreso por ej.
Id_Tipo_Rec = 0
y Num_Rec = Null
me lo permite (O sea no se relaciona con ningún registro de RECIBOS pero
además me deja inconsistente la tabla APORTES)

Lo que yo pensaba era hacer una restricción en el ingreso de datos:

([Id_tipo_Recibo] = null and [Num_Recibo] = null) or ([Id_tipo_Recibo] <>
null and [Num_Recibo] <> null)

Pero me saca los paréntesis y no me da ningún error, ¿alguien me puede tirar
alguna idea?
Gracias

María Eugenia Ryan

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
08/06/2006 - 16:40 | Informe spam
María,

La unica comparacion permitible contra valores null es "IS [NOT] NULL".
Puedes crear una restriccion "CHECK" a nivel de tabla.

Ejemplo:

create table dbo.t1 (
c1 int,
c2 int,
constraint chk_c1_c2 check((c1 is null and c2 is null) or (c1 is not null
and c2 is not null))
)
go

insert into dbo.t1 values(1, null)
go

drop table dbo.t1
go


AMB

"María Eugenia Ryan" wrote:

Hola a todos, tengo una tabla RECIBOS con los siguientes campos:

Id_Tipo_Rec (Integer) (clave)
Num_Rec (Integer) (clave)
...

Y, además tengo la tabla APORTES con los siguientes campos:

Id_Aporte (clave)

Id_Tipo_Rec
Num_Rec
Donde Id_Tipo_Rec y Num_Rec no son obligatorios.

O sea las dos tabla se relacionan con los campos Id_Tipo_Rec, Num_Rec.
El problema es que, en la tabla APORTES, si ingreso por ej.
Id_Tipo_Rec = 0
y Num_Rec = Null
me lo permite (O sea no se relaciona con ningún registro de RECIBOS pero
además me deja inconsistente la tabla APORTES)

Lo que yo pensaba era hacer una restricción en el ingreso de datos:

([Id_tipo_Recibo] = null and [Num_Recibo] = null) or ([Id_tipo_Recibo] <>
null and [Num_Recibo] <> null)

Pero me saca los paréntesis y no me da ningún error, ¿alguien me puede tirar
alguna idea?
Gracias

María Eugenia Ryan



Respuesta Responder a este mensaje
#2 María Eugenia Ryan
08/06/2006 - 17:12 | Informe spam
Disculpame Alejandro, no entiendo bien
entré a la tabla APORTES en modo diseño, luego fui a las
propiedades/Restricciones y allí puse

check((Id_tipo_Recibo is null and Num_Recibo is null) or (Id_tipo_Recibo is
not null and Num_Recibo is not null))

pero me da error.



"Alejandro Mesa" escribió en el
mensaje news:
María,

La unica comparacion permitible contra valores null es "IS [NOT] NULL".
Puedes crear una restriccion "CHECK" a nivel de tabla.

Ejemplo:

create table dbo.t1 (
c1 int,
c2 int,
constraint chk_c1_c2 check((c1 is null and c2 is null) or (c1 is not null
and c2 is not null))
)
go

insert into dbo.t1 values(1, null)
go

drop table dbo.t1
go


AMB

"María Eugenia Ryan" wrote:

Hola a todos, tengo una tabla RECIBOS con los siguientes campos:

Id_Tipo_Rec (Integer) (clave)
Num_Rec (Integer) (clave)
...

Y, además tengo la tabla APORTES con los siguientes campos:

Id_Aporte (clave)

Id_Tipo_Rec
Num_Rec
Donde Id_Tipo_Rec y Num_Rec no son obligatorios.

O sea las dos tabla se relacionan con los campos Id_Tipo_Rec, Num_Rec.
El problema es que, en la tabla APORTES, si ingreso por ej.
Id_Tipo_Rec = 0
y Num_Rec = Null
me lo permite (O sea no se relaciona con ningún registro de RECIBOS pero
además me deja inconsistente la tabla APORTES)

Lo que yo pensaba era hacer una restricción en el ingreso de datos:

([Id_tipo_Recibo] = null and [Num_Recibo] = null) or ([Id_tipo_Recibo] <>
null and [Num_Recibo] <> null)

Pero me saca los paréntesis y no me da ningún error, ¿alguien me puede
tirar
alguna idea?
Gracias

María Eugenia Ryan



Respuesta Responder a este mensaje
#3 Alejandro Mesa
08/06/2006 - 17:44 | Informe spam
María,

pero me da error.



Cual es el error que te da?

Yo no uso mucho el Enterprise Manager para hacer ese tipo de cambios, pues
es conocido que EM tiene muchos bugs. Si sabes cual es el nombre de la
restriccion "check", ve al Query Analyzer y ejecuta:

use tu_db
go

alter table dbo.APORTES
drop constraint nombre_del_constraint
go

alter table dbo.APORTES
add constraint chk_Id_tipo_Recibo_Num_Recibo check (
((Id_tipo_Recibo is null) and (Num_Recibo is null))
or
((Id_tipo_Recibo is not null) and (Num_Recibo is not null))
)
go


AMB

"María Eugenia Ryan" wrote:

Disculpame Alejandro, no entiendo bien
entré a la tabla APORTES en modo diseño, luego fui a las
propiedades/Restricciones y allí puse

check((Id_tipo_Recibo is null and Num_Recibo is null) or (Id_tipo_Recibo is
not null and Num_Recibo is not null))

pero me da error.



"Alejandro Mesa" escribió en el
mensaje news:
> María,
>
> La unica comparacion permitible contra valores null es "IS [NOT] NULL".
> Puedes crear una restriccion "CHECK" a nivel de tabla.
>
> Ejemplo:
>
> create table dbo.t1 (
> c1 int,
> c2 int,
> constraint chk_c1_c2 check((c1 is null and c2 is null) or (c1 is not null
> and c2 is not null))
> )
> go
>
> insert into dbo.t1 values(1, null)
> go
>
> drop table dbo.t1
> go
>
>
> AMB
>
> "María Eugenia Ryan" wrote:
>
>> Hola a todos, tengo una tabla RECIBOS con los siguientes campos:
>>
>> Id_Tipo_Rec (Integer) (clave)
>> Num_Rec (Integer) (clave)
>> ...
>>
>> Y, además tengo la tabla APORTES con los siguientes campos:
>>
>> Id_Aporte (clave)
>>
>> Id_Tipo_Rec
>> Num_Rec
>> Donde Id_Tipo_Rec y Num_Rec no son obligatorios.
>>
>> O sea las dos tabla se relacionan con los campos Id_Tipo_Rec, Num_Rec.
>> El problema es que, en la tabla APORTES, si ingreso por ej.
>> Id_Tipo_Rec = 0
>> y Num_Rec = Null
>> me lo permite (O sea no se relaciona con ningún registro de RECIBOS pero
>> además me deja inconsistente la tabla APORTES)
>>
>> Lo que yo pensaba era hacer una restricción en el ingreso de datos:
>>
>> ([Id_tipo_Recibo] = null and [Num_Recibo] = null) or ([Id_tipo_Recibo] <>
>> null and [Num_Recibo] <> null)
>>
>> Pero me saca los paréntesis y no me da ningún error, ¿alguien me puede
>> tirar
>> alguna idea?
>> Gracias
>>
>> María Eugenia Ryan
>>
>>
>>



Respuesta Responder a este mensaje
#4 Julio Cesar
08/06/2006 - 18:03 | Informe spam
Y que usas para administrar la BD???

Un saludo,

"Alejandro Mesa" escribió en el
mensaje news:
María,

> pero me da error.

Cual es el error que te da?

Yo no uso mucho el Enterprise Manager para hacer ese tipo de cambios, pues
es conocido que EM tiene muchos bugs. Si sabes cual es el nombre de la
restriccion "check", ve al Query Analyzer y ejecuta:

use tu_db
go

alter table dbo.APORTES
drop constraint nombre_del_constraint
go

alter table dbo.APORTES
add constraint chk_Id_tipo_Recibo_Num_Recibo check (
((Id_tipo_Recibo is null) and (Num_Recibo is null))
or
((Id_tipo_Recibo is not null) and (Num_Recibo is not null))
)
go


AMB

"María Eugenia Ryan" wrote:

> Disculpame Alejandro, no entiendo bien
> entré a la tabla APORTES en modo diseño, luego fui a las
> propiedades/Restricciones y allí puse
>
> check((Id_tipo_Recibo is null and Num_Recibo is null) or (Id_tipo_Recibo


is
> not null and Num_Recibo is not null))
>
> pero me da error.
>
>
>
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > María,
> >
> > La unica comparacion permitible contra valores null es "IS [NOT]


NULL".
> > Puedes crear una restriccion "CHECK" a nivel de tabla.
> >
> > Ejemplo:
> >
> > create table dbo.t1 (
> > c1 int,
> > c2 int,
> > constraint chk_c1_c2 check((c1 is null and c2 is null) or (c1 is not


null
> > and c2 is not null))
> > )
> > go
> >
> > insert into dbo.t1 values(1, null)
> > go
> >
> > drop table dbo.t1
> > go
> >
> >
> > AMB
> >
> > "María Eugenia Ryan" wrote:
> >
> >> Hola a todos, tengo una tabla RECIBOS con los siguientes campos:
> >>
> >> Id_Tipo_Rec (Integer) (clave)
> >> Num_Rec (Integer) (clave)
> >> ...
> >>
> >> Y, además tengo la tabla APORTES con los siguientes campos:
> >>
> >> Id_Aporte (clave)
> >>
> >> Id_Tipo_Rec
> >> Num_Rec
> >> Donde Id_Tipo_Rec y Num_Rec no son obligatorios.
> >>
> >> O sea las dos tabla se relacionan con los campos Id_Tipo_Rec,


Num_Rec.
> >> El problema es que, en la tabla APORTES, si ingreso por ej.
> >> Id_Tipo_Rec = 0
> >> y Num_Rec = Null
> >> me lo permite (O sea no se relaciona con ningún registro de RECIBOS


pero
> >> además me deja inconsistente la tabla APORTES)
> >>
> >> Lo que yo pensaba era hacer una restricción en el ingreso de datos:
> >>
> >> ([Id_tipo_Recibo] = null and [Num_Recibo] = null) or


([Id_tipo_Recibo] <>
> >> null and [Num_Recibo] <> null)
> >>
> >> Pero me saca los paréntesis y no me da ningún error, ¿alguien me


puede
> >> tirar
> >> alguna idea?
> >> Gracias
> >>
> >> María Eugenia Ryan
> >>
> >>
> >>
>
>
>
Respuesta Responder a este mensaje
#5 Alejandro Mesa
08/06/2006 - 18:39 | Informe spam
Julio,

Mayormente uso Query Analyzer. Detras de cada operacion que haces en
Enterprise Manager, hay una sentencia DDL o DML.


AMB

"Julio Cesar" wrote:

Y que usas para administrar la BD???

Un saludo,

"Alejandro Mesa" escribió en el
mensaje news:
> María,
>
> > pero me da error.
>
> Cual es el error que te da?
>
> Yo no uso mucho el Enterprise Manager para hacer ese tipo de cambios, pues
> es conocido que EM tiene muchos bugs. Si sabes cual es el nombre de la
> restriccion "check", ve al Query Analyzer y ejecuta:
>
> use tu_db
> go
>
> alter table dbo.APORTES
> drop constraint nombre_del_constraint
> go
>
> alter table dbo.APORTES
> add constraint chk_Id_tipo_Recibo_Num_Recibo check (
> ((Id_tipo_Recibo is null) and (Num_Recibo is null))
> or
> ((Id_tipo_Recibo is not null) and (Num_Recibo is not null))
> )
> go
>
>
> AMB
>
> "María Eugenia Ryan" wrote:
>
> > Disculpame Alejandro, no entiendo bien
> > entré a la tabla APORTES en modo diseño, luego fui a las
> > propiedades/Restricciones y allí puse
> >
> > check((Id_tipo_Recibo is null and Num_Recibo is null) or (Id_tipo_Recibo
is
> > not null and Num_Recibo is not null))
> >
> > pero me da error.
> >
> >
> >
> > "Alejandro Mesa" escribió en
el
> > mensaje news:
> > > María,
> > >
> > > La unica comparacion permitible contra valores null es "IS [NOT]
NULL".
> > > Puedes crear una restriccion "CHECK" a nivel de tabla.
> > >
> > > Ejemplo:
> > >
> > > create table dbo.t1 (
> > > c1 int,
> > > c2 int,
> > > constraint chk_c1_c2 check((c1 is null and c2 is null) or (c1 is not
null
> > > and c2 is not null))
> > > )
> > > go
> > >
> > > insert into dbo.t1 values(1, null)
> > > go
> > >
> > > drop table dbo.t1
> > > go
> > >
> > >
> > > AMB
> > >
> > > "María Eugenia Ryan" wrote:
> > >
> > >> Hola a todos, tengo una tabla RECIBOS con los siguientes campos:
> > >>
> > >> Id_Tipo_Rec (Integer) (clave)
> > >> Num_Rec (Integer) (clave)
> > >> ...
> > >>
> > >> Y, además tengo la tabla APORTES con los siguientes campos:
> > >>
> > >> Id_Aporte (clave)
> > >>
> > >> Id_Tipo_Rec
> > >> Num_Rec
> > >> Donde Id_Tipo_Rec y Num_Rec no son obligatorios.
> > >>
> > >> O sea las dos tabla se relacionan con los campos Id_Tipo_Rec,
Num_Rec.
> > >> El problema es que, en la tabla APORTES, si ingreso por ej.
> > >> Id_Tipo_Rec = 0
> > >> y Num_Rec = Null
> > >> me lo permite (O sea no se relaciona con ningún registro de RECIBOS
pero
> > >> además me deja inconsistente la tabla APORTES)
> > >>
> > >> Lo que yo pensaba era hacer una restricción en el ingreso de datos:
> > >>
> > >> ([Id_tipo_Recibo] = null and [Num_Recibo] = null) or
([Id_tipo_Recibo] <>
> > >> null and [Num_Recibo] <> null)
> > >>
> > >> Pero me saca los paréntesis y no me da ningún error, ¿alguien me
puede
> > >> tirar
> > >> alguna idea?
> > >> Gracias
> > >>
> > >> María Eugenia Ryan
> > >>
> > >>
> > >>
> >
> >
> >



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida