Question

J'ai un package DTS qui génère une erreur avec un "Copier des objets SQL Server" " tâche. La tâche consiste à copier une table et des données d’un serveur SQL Server 2000 SP4 vers un autre (même version) et donne l’erreur suivante: -

Impossible de trouver la contrainte CHECK pour 'dbo.MyTableName', bien que la table soit marquée comme en ayant un.

Une contrainte de vérification est définie dans la table source et semble être à l'origine du problème. Après avoir exécuté le package DTS, la chose semble fonctionner correctement - la table, toutes les contraintes et les données sont créées sur le serveur de destination? Mais l'erreur ci-dessus est générée, empêchant l'exécution des étapes suivantes.

Avez-vous une idée du pourquoi de cette erreur?

Était-ce utile?

La solution

Cela indique que les métadonnées des tables système ne sont plus synchronisées avec votre schéma actuel. Si vous ne voyez pas d'autres signes de corruption plus généralisée, reconstruisez la table en la copiant dans une autre table (sélectionnez * dans newtable à partir de oldtable), supprimez l'ancienne table, renommez la nouvelle et remplacez les contraintes. Aidez-moi. Ceci est similaire à la façon dont Enterprise Manager pour 2000 agit lorsque vous insérez une colonne qui ne se trouve pas à la fin du tableau. Insérez une nouvelle colonne au milieu du tableau, puis supprimez-le. ne voulez pas écrire manuellement les requêtes.

Je serais un peu préoccupé par l’état de la base de données dans son ensemble si vous voyez d’autres occurrences de ce type d’erreur. (Je suppose ici que vous avez déjà effectué les commandes CHECKDB et que l'erreur persiste ...)

Autres conseils

Cette erreur a commencé lorsqu'une nouvelle colonne (avec une contrainte de vérification) a été ajoutée à une table existante. Pour enquêter j'ai: -

  • Copiez la table dans une autre destination SQL Server et obtenez la même erreur.
  • Création d'une nouvelle table avec exactement la même structure mais un nom différent et copiée sans erreur.
  • Supprimez et recréez la contrainte de vérification sur la table des problèmes, mais obtenez toujours la même erreur.
  • dbcc checktable ('MyTableName') avec ALL_ERRORMSGS ne génère aucune erreur.
  • dbcc checkdb dans les bases de données source et cible ne génère aucune erreur.

Fait intéressant, le package DTS semble: -

  • Copiez le tableau.
  • Copiez les données.
  • Créer les contraintes

Comme le temps de création de la contrainte de vérification est de 7 minutes après le temps de création de la table, c’est-à-dire qu’il crée la contrainte de vérification APRÈS le déplacement des données. Cela a du sens car il n’est pas nécessaire de vérifier les données lors de la copie, ce qui améliorerait vraisemblablement les performances.

Comme le suggère Godeke, je pense que quelque chose est corrompu dans les tables système, puisqu'un nouveau tableau avec les mêmes colonnes fonctionne. Même si les instructions DBCC ne donnent aucune erreur?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top