analizador de integridad

01/03/2007 - 14:11 por Fernando Ugarte | Informe spam
Buenas
Estoy necesitando un analizador de integridad referencial de la bbdd y se me
ocurrio que se podria armar automaticamente consultando las vistas del
sistema o con sp_fkey, etc

Lo que necesito, por si alguien lo tiene o conoce como hacerlo es que para
cada fk de una tabla ver los registros que no tienen integridad
Pero como tengo casi 400 tablas no quiero consultar una por una :)

Por ejemplo
select * from facturas where facturas.clienteid not in (select clienteid
from clientes)
select * from facturas where facturas.productoid not in (select productoid
from productos)
etc, etc

Gracias

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
01/03/2007 - 15:47 | Informe spam
Fernando,

Es utilidad existe en SQL Server (al menos 2000 y 2005). Chequea el comando
"DBCC CHECKCONSTRAINTS" en tus libros en linea.

Puedes almarte un cursor que recorra la vista
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS, y ejecutar el comando dbcc por
cada restriccion de clave foranea.


AMB


"Fernando Ugarte" wrote:

Buenas
Estoy necesitando un analizador de integridad referencial de la bbdd y se me
ocurrio que se podria armar automaticamente consultando las vistas del
sistema o con sp_fkey, etc

Lo que necesito, por si alguien lo tiene o conoce como hacerlo es que para
cada fk de una tabla ver los registros que no tienen integridad
Pero como tengo casi 400 tablas no quiero consultar una por una :)

Por ejemplo
select * from facturas where facturas.clienteid not in (select clienteid
from clientes)
select * from facturas where facturas.productoid not in (select productoid
from productos)
etc, etc

Gracias



Respuesta Responder a este mensaje
#2 etragu
01/03/2007 - 21:49 | Informe spam
Alejandro
Gracias por tu respuesta
Mi problema es algo mas complejo, paso a contarte
Generamos la bbdd con una herramienta CASE llamada Genexus quien
supuestamente se encarga de la integridad referencial, y no habilitamos la
integridad en la bbdd, pero la herramienta no es tan precisa, sobre todo
cuando traemos datos de filiales por lo que existe bastante inconsistencia.
Por lo que tengo una bbdd sin constrains con los datos, y otra bbdd igual
con las contrains pero sin los datos.

Encontre algunos scripts en sqlcentral.com como un procedimiento almacenado
llamado Check_FK que es casi exactamente lo que necesito, pero como para que
se genere el procedimiento almacenado tienen que estar declaradas las
contrains solo se genera en la bbdd que tengo sin datos, pero no en la de
produccion dado que las tablas no estan relacionadas.

Por eso lo que necesitaria es capturar el comando sql que se ejecuta en la
bbdd de prueba y ejecutarlo en la de produccion
Espero haber sido claro ;)

Saludos

"Alejandro Mesa" escribió en el
mensaje news:
Fernando,

Es utilidad existe en SQL Server (al menos 2000 y 2005). Chequea el


comando
"DBCC CHECKCONSTRAINTS" en tus libros en linea.

Puedes almarte un cursor que recorra la vista
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS, y ejecutar el comando dbcc por
cada restriccion de clave foranea.


AMB


"Fernando Ugarte" wrote:

> Buenas
> Estoy necesitando un analizador de integridad referencial de la bbdd y


se me
> ocurrio que se podria armar automaticamente consultando las vistas del
> sistema o con sp_fkey, etc
>
> Lo que necesito, por si alguien lo tiene o conoce como hacerlo es que


para
> cada fk de una tabla ver los registros que no tienen integridad
> Pero como tengo casi 400 tablas no quiero consultar una por una :)
>
> Por ejemplo
> select * from facturas where facturas.clienteid not in (select clienteid
> from clientes)
> select * from facturas where facturas.productoid not in (select


productoid
> from productos)
> etc, etc
>
> Gracias
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
01/03/2007 - 22:28 | Informe spam
Fernando,

No entiendo bien lo quieres hacer.

1 - Si deseas saber que valores de una columna no estan presentes en la
columna de otra tabla, lo unico que debes hacer es un "anti semi join" de
ambas tablas. Por ejemplo, queremos ver las filas en dbo.t2 que no machan con
dbo.t1 mediante la columna [c1].

select *
from dbo.t2 as a
where not exists (
select *
from dbo.t1 as b
where b.c1 = a.c1
)
go

Deseas hacer algo mas?


AMB

"etragu" wrote:

Alejandro
Gracias por tu respuesta
Mi problema es algo mas complejo, paso a contarte
Generamos la bbdd con una herramienta CASE llamada Genexus quien
supuestamente se encarga de la integridad referencial, y no habilitamos la
integridad en la bbdd, pero la herramienta no es tan precisa, sobre todo
cuando traemos datos de filiales por lo que existe bastante inconsistencia.
Por lo que tengo una bbdd sin constrains con los datos, y otra bbdd igual
con las contrains pero sin los datos.

Encontre algunos scripts en sqlcentral.com como un procedimiento almacenado
llamado Check_FK que es casi exactamente lo que necesito, pero como para que
se genere el procedimiento almacenado tienen que estar declaradas las
contrains solo se genera en la bbdd que tengo sin datos, pero no en la de
produccion dado que las tablas no estan relacionadas.

Por eso lo que necesitaria es capturar el comando sql que se ejecuta en la
bbdd de prueba y ejecutarlo en la de produccion
Espero haber sido claro ;)

Saludos

"Alejandro Mesa" escribió en el
mensaje news:
> Fernando,
>
> Es utilidad existe en SQL Server (al menos 2000 y 2005). Chequea el
comando
> "DBCC CHECKCONSTRAINTS" en tus libros en linea.
>
> Puedes almarte un cursor que recorra la vista
> INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS, y ejecutar el comando dbcc por
> cada restriccion de clave foranea.
>
>
> AMB
>
>
> "Fernando Ugarte" wrote:
>
> > Buenas
> > Estoy necesitando un analizador de integridad referencial de la bbdd y
se me
> > ocurrio que se podria armar automaticamente consultando las vistas del
> > sistema o con sp_fkey, etc
> >
> > Lo que necesito, por si alguien lo tiene o conoce como hacerlo es que
para
> > cada fk de una tabla ver los registros que no tienen integridad
> > Pero como tengo casi 400 tablas no quiero consultar una por una :)
> >
> > Por ejemplo
> > select * from facturas where facturas.clienteid not in (select clienteid
> > from clientes)
> > select * from facturas where facturas.productoid not in (select
productoid
> > from productos)
> > etc, etc
> >
> > Gracias
> >
> >
> >



Respuesta Responder a este mensaje
#4 etragu
02/03/2007 - 17:23 | Informe spam
Eso mismo necesito, pero para todas las tablas de mi sistema
Saludos


"Alejandro Mesa" escribió en el
mensaje news:
Fernando,

No entiendo bien lo quieres hacer.

1 - Si deseas saber que valores de una columna no estan presentes en la
columna de otra tabla, lo unico que debes hacer es un "anti semi join" de
ambas tablas. Por ejemplo, queremos ver las filas en dbo.t2 que no machan


con
dbo.t1 mediante la columna [c1].

select *
from dbo.t2 as a
where not exists (
select *
from dbo.t1 as b
where b.c1 = a.c1
)
go

Deseas hacer algo mas?


AMB

"etragu" wrote:

> Alejandro
> Gracias por tu respuesta
> Mi problema es algo mas complejo, paso a contarte
> Generamos la bbdd con una herramienta CASE llamada Genexus quien
> supuestamente se encarga de la integridad referencial, y no habilitamos


la
> integridad en la bbdd, pero la herramienta no es tan precisa, sobre todo
> cuando traemos datos de filiales por lo que existe bastante


inconsistencia.
> Por lo que tengo una bbdd sin constrains con los datos, y otra bbdd


igual
> con las contrains pero sin los datos.
>
> Encontre algunos scripts en sqlcentral.com como un procedimiento


almacenado
> llamado Check_FK que es casi exactamente lo que necesito, pero como para


que
> se genere el procedimiento almacenado tienen que estar declaradas las
> contrains solo se genera en la bbdd que tengo sin datos, pero no en la


de
> produccion dado que las tablas no estan relacionadas.
>
> Por eso lo que necesitaria es capturar el comando sql que se ejecuta en


la
> bbdd de prueba y ejecutarlo en la de produccion
> Espero haber sido claro ;)
>
> Saludos
>
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > Fernando,
> >
> > Es utilidad existe en SQL Server (al menos 2000 y 2005). Chequea el
> comando
> > "DBCC CHECKCONSTRAINTS" en tus libros en linea.
> >
> > Puedes almarte un cursor que recorra la vista
> > INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS, y ejecutar el comando dbcc


por
> > cada restriccion de clave foranea.
> >
> >
> > AMB
> >
> >
> > "Fernando Ugarte" wrote:
> >
> > > Buenas
> > > Estoy necesitando un analizador de integridad referencial de la bbdd


y
> se me
> > > ocurrio que se podria armar automaticamente consultando las vistas


del
> > > sistema o con sp_fkey, etc
> > >
> > > Lo que necesito, por si alguien lo tiene o conoce como hacerlo es


que
> para
> > > cada fk de una tabla ver los registros que no tienen integridad
> > > Pero como tengo casi 400 tablas no quiero consultar una por una :)
> > >
> > > Por ejemplo
> > > select * from facturas where facturas.clienteid not in (select


clienteid
> > > from clientes)
> > > select * from facturas where facturas.productoid not in (select
> productoid
> > > from productos)
> > > etc, etc
> > >
> > > Gracias
> > >
> > >
> > >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida