OVH Cloud OVH Cloud

Désactiver l'intégrité référentielle momentanément...

5 réponses
Avatar
Via
Bonjour à tous !

Je cherche à copier une base Access dans une base SQL Server équivalente,
à l'aide d'une application VB.
Mon problème est le suivant : si je veux respecter les intégrités
référentielles, il faut que je fasse les copies de tables dans un certain
ordre, sous peine de me voir refuser certaines actions.
Plutôt que de coder en dur l'ordre des tables, je me demande s'il n'existe
pas un moyen de désactiver l'intégrité référentielle le temps d'updater mes
tables, puis de la réactiver une fois cela fait.
Possible ? Pas possible ? Si possible, comment ?
Merci d'avance,

Via :)

5 réponses

Avatar
Zoury
Salut Via! :O)

Les groupes Access ou SQL Server pourront peut-être te fournir de meilleurs
solutions.

Rapidement, je vois une solution simple, ce serait de te créer un script DTS
qui te permettrait de faire les échanges dans l'ordre que tu le souhaites
sans devoir les coder à la main.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Via
Merci Yanick.
Le seul petit détail, c'est que je ne sais pas ce qu'est un script DTS :)
En fait je voudrais faire un truc du genre :

For Each Table
'Si non table système Alors copier les données ligne par ligne.
Next

Mais les tables dans ce genre de cas défilent dans l'ordre alphabétique,
ce qui ne me va pas, vu que ce n'est pas l'ordre pour respecter les
contraintes d'intégrité référentielle.
Maintenant je peux toujours coder en mettant les noms de tables dans le
code et en copiant pour chaque table, mais ça m'em...bête :) En plus ce
n'est pas dynamique.
D'où ma question initiale :)
Si tu as mieux, plus rapide, autre (barrer mention inutile), ça
m'intéresse !
Merci,

Via :)

"Zoury" a écrit dans le message de news:

Salut Via! :O)

Les groupes Access ou SQL Server pourront peut-être te fournir de


meilleurs
solutions.

Rapidement, je vois une solution simple, ce serait de te créer un script


DTS
qui te permettrait de faire les échanges dans l'ordre que tu le souhaites
sans devoir les coder à la main.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/




Avatar
Via
Bonjour !

Merci, mais il me semble que c'est vraiment "bourrin" comme manière de
faire... mais pas forcément idiot si je ne trouve vraiment rien d'autre !

Via :)

"R Tirchet" a écrit dans le message de news:

style force brute il te suffit de faire une boucle infinie sur tes tables
et d'enlever au fur et à mesure celles qui passent.
au pire avec n cycles tout passera


"Via" a écrit dans le message de news:

> Merci Yanick.
> Le seul petit détail, c'est que je ne sais pas ce qu'est un script DTS
:)
> En fait je voudrais faire un truc du genre :
>
> For Each Table
> 'Si non table système Alors copier les données ligne par ligne.
> Next
>
> Mais les tables dans ce genre de cas défilent dans l'ordre


alphabétique,
> ce qui ne me va pas, vu que ce n'est pas l'ordre pour respecter les
> contraintes d'intégrité référentielle.
> Maintenant je peux toujours coder en mettant les noms de tables dans


le
> code et en copiant pour chaque table, mais ça m'em...bête :) En plus ce
> n'est pas dynamique.
> D'où ma question initiale :)
> Si tu as mieux, plus rapide, autre (barrer mention inutile), ça
> m'intéresse !
> Merci,
>
> Via :)
>
> "Zoury" a écrit dans le message de news:
>
> > Salut Via! :O)
> >
> > Les groupes Access ou SQL Server pourront peut-être te fournir de
> meilleurs
> > solutions.
> >
> > Rapidement, je vois une solution simple, ce serait de te créer un


script
> DTS
> > qui te permettrait de faire les échanges dans l'ordre que tu le
souhaites
> > sans devoir les coder à la main.
> >
> > --
> > Cordialement
> > Yanick Lefebvre - MVP pour Visual Basic
> > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> > http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
> >
> >
>
>




Avatar
Via
Bonjour,

merci pour ces infos effectivement utiles.
J'ai utilisé aussi les requêtes "ALTER TABLE " & Table.Name & " DISABLE
TRIGGER ALL" et "ALTER TABLE " & Table.Name & " ENABLE TRIGGER ALL" parce
que l'intégrité référentielle est aussi gérée par des triggers à des
endroits où les relations n'étaient pas possibles. Celles-ci marchent, je
vois dans le code des triggers qu'ils ont été désactivés puis réactivés.
Par contre je constate que certaines contraintes ne sont pas réactivées
après coup. Comment puis-je vérifier cela directement dans SQL Server ? Y
a-t-il un code rajouté quelque part ? Une case cochée ou décochée ?
Merci d'avance,

Via :)


"Christophe BAVIERE" a écrit dans le message de
news:
Bonjour,

Je pense que tu peux utiliser les requetes suivantes pour


désactiver/activer
toutes les contraintes d'une table

ALTER TABLE tablename NOCHECK CONSTRAINT ALL
ALTER TABLE tablename CHECK CONSTRAINT ALL

regarde dans le BOL pour avoir plus de détails

A utiliser avec beaucoup de précaution pour ne pas perdre l'intégrité de


tes
données

@+
Christophe BAVIERE


"R Tirchet" a écrit dans le message de news:

> style force brute il te suffit de faire une boucle infinie sur tes


tables
> et d'enlever au fur et à mesure celles qui passent.
> au pire avec n cycles tout passera
>
>
> "Via" a écrit dans le message de news:
>
> > Merci Yanick.
> > Le seul petit détail, c'est que je ne sais pas ce qu'est un script


DTS
> :)
> > En fait je voudrais faire un truc du genre :
> >
> > For Each Table
> > 'Si non table système Alors copier les données ligne par ligne.
> > Next
> >
> > Mais les tables dans ce genre de cas défilent dans l'ordre
alphabétique,
> > ce qui ne me va pas, vu que ce n'est pas l'ordre pour respecter les
> > contraintes d'intégrité référentielle.
> > Maintenant je peux toujours coder en mettant les noms de tables dans
le
> > code et en copiant pour chaque table, mais ça m'em...bête :) En plus


ce
> > n'est pas dynamique.
> > D'où ma question initiale :)
> > Si tu as mieux, plus rapide, autre (barrer mention inutile), ça
> > m'intéresse !
> > Merci,
> >
> > Via :)
> >
> > "Zoury" a écrit dans le message de news:
> >
> > > Salut Via! :O)
> > >
> > > Les groupes Access ou SQL Server pourront peut-être te fournir de
> > meilleurs
> > > solutions.
> > >
> > > Rapidement, je vois une solution simple, ce serait de te créer un
script
> > DTS
> > > qui te permettrait de faire les échanges dans l'ordre que tu le
> souhaites
> > > sans devoir les coder à la main.
> > >
> > > --
> > > Cordialement
> > > Yanick Lefebvre - MVP pour Visual Basic
> > > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> > > http://www.mentalis.org/agnet/apiguide.shtml -


http://www.mztools.com/
> > >
> > >
> >
> >
>
>




Avatar
Christophe BAVIERE
Bonjour,

Si tu fais un sp_help sur ta table, tu peux voir si tes contraintes sont
enabled/disabled

@+
Christophe BAVIERE



"Via" a écrit dans le message de news:

Bonjour,

merci pour ces infos effectivement utiles.
J'ai utilisé aussi les requêtes "ALTER TABLE " & Table.Name & " DISABLE
TRIGGER ALL" et "ALTER TABLE " & Table.Name & " ENABLE TRIGGER ALL" parce
que l'intégrité référentielle est aussi gérée par des triggers à des
endroits où les relations n'étaient pas possibles. Celles-ci marchent, je
vois dans le code des triggers qu'ils ont été désactivés puis réactivés.
Par contre je constate que certaines contraintes ne sont pas réactivées
après coup. Comment puis-je vérifier cela directement dans SQL Server ? Y
a-t-il un code rajouté quelque part ? Une case cochée ou décochée ?
Merci d'avance,

Via :)


"Christophe BAVIERE" a écrit dans le message de
news:
> Bonjour,
>
> Je pense que tu peux utiliser les requetes suivantes pour
désactiver/activer
> toutes les contraintes d'une table
>
> ALTER TABLE tablename NOCHECK CONSTRAINT ALL
> ALTER TABLE tablename CHECK CONSTRAINT ALL
>
> regarde dans le BOL pour avoir plus de détails
>
> A utiliser avec beaucoup de précaution pour ne pas perdre l'intégrité de
tes
> données
>
> @+
> Christophe BAVIERE
>
>
> "R Tirchet" a écrit dans le message de news:
>
> > style force brute il te suffit de faire une boucle infinie sur tes
tables
> > et d'enlever au fur et à mesure celles qui passent.
> > au pire avec n cycles tout passera
> >
> >
> > "Via" a écrit dans le message de news:
> >
> > > Merci Yanick.
> > > Le seul petit détail, c'est que je ne sais pas ce qu'est un script
DTS
> > :)
> > > En fait je voudrais faire un truc du genre :
> > >
> > > For Each Table
> > > 'Si non table système Alors copier les données ligne par ligne.
> > > Next
> > >
> > > Mais les tables dans ce genre de cas défilent dans l'ordre
> alphabétique,
> > > ce qui ne me va pas, vu que ce n'est pas l'ordre pour respecter les
> > > contraintes d'intégrité référentielle.
> > > Maintenant je peux toujours coder en mettant les noms de tables


dans
> le
> > > code et en copiant pour chaque table, mais ça m'em...bête :) En plus
ce
> > > n'est pas dynamique.
> > > D'où ma question initiale :)
> > > Si tu as mieux, plus rapide, autre (barrer mention inutile), ça
> > > m'intéresse !
> > > Merci,
> > >
> > > Via :)
> > >
> > > "Zoury" a écrit dans le message de


news:
> > >
> > > > Salut Via! :O)
> > > >
> > > > Les groupes Access ou SQL Server pourront peut-être te fournir de
> > > meilleurs
> > > > solutions.
> > > >
> > > > Rapidement, je vois une solution simple, ce serait de te créer un
> script
> > > DTS
> > > > qui te permettrait de faire les échanges dans l'ordre que tu le
> > souhaites
> > > > sans devoir les coder à la main.
> > > >
> > > > --
> > > > Cordialement
> > > > Yanick Lefebvre - MVP pour Visual Basic
> > > > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> > > > http://www.mentalis.org/agnet/apiguide.shtml -
http://www.mztools.com/
> > > >
> > > >
> > >
> > >
> >
> >
>
>