2010-07-11 4 views
3

Cela a effectivement ruiné ma journée. J'ai un plus grand nombre de tables avec beaucoup de relations FK entre. L'une des tables (appelons la table A) a une colonne calculée, qui est calculée via un UDF avec schemabinding et indexée en texte intégral.SQL Server Mgmt Studio gâcher ma base de données!

Si je modifier une table (permet de l'appeler le tableau B) que de quelque façon est liée (par exemple via FK) à la table avec la colonne calculée indexé fulltext (tableau A), et je l'enregistrer, ce qui suit arrive:

  • changements à la table (tableau B) sont enregistrés
  • Je reçois l'erreur: "la colonne 'ABCD' est pas indexé texte intégral." en ce qui concerne le tableau A que je ne l'ai pas même modifier, puis « L'utilisateur a annulé dialogue de sauvegarde »
  • Toutes les relations FK à toutes les tables du tableau B sont supprimées

Qu'est-ce qui se passe? ?? Quelqu'un peut-il m'expliquer comment cela peut arriver?

+6

Management Studio dispose d'une fonctionnalité qui vous montrera le script qu'il va exécuter avant d'appliquer des modifications. Avez-vous vérifié cela? –

+0

Avez-vous installé MSSQL SP1 (sur le client - Outils SQL Server)? Je ne sais pas que cela empêcherait ce qui précède, mais ça vaut le coup d'essayer. –

+0

@OMG Poneys: Il a effectivement supprimé les relations même si les données étaient présentes. @Joel: Non je n'ai pas encore vérifié ... @Will: Je ne pense pas avoir MSSQL SP1 ... Ma version SQL est 10.0.2531.0 – Alex

Répondre

2

J'ai eu le même genre de problème. Comme on A dit, le studio de gestion fera les étapes suivantes pour mettre à jour une table et ses clés étrangères:

  1. Créer une nouvelle table appelée temp_
  2. Copier le contenu de table ancienne dans le nouveau
  3. supprimer toutes les contraintes , les index et les clés étrangères
  4. Goutte ancienne table
  5. Renommer nouvelle table pour être = ancienne table
  6. Recréez les clés étrangères, des index et des contraintes

Je peux avoir les 3 premiers dans le mauvais ordre mais vous avez l'idée. Dans mon cas, j'ai perdu des tables entières et pas seulement les clés étrangères. Personnellement, je n'aime pas la façon dont il le fait car il peut être très long d'avoir à recréer des index sur une table avec beaucoup de données. Si c'est un petit changement, je le fais moi-même dans T-SQL.

Examinez le script de modification avant de l'exécuter, assurez-vous qu'il semble raisonnable.

@OMGPions, pourquoi ne pas supprimer une clé étrangère s'il y a des données dans la table? Bien sûr vous pouvez. Il n'y a que des restrictions sur la création de clés étrangères sur des tables avec des données, mais seulement si cela casse la contrainte. Cependant, même cela peut être évité en utilisant l'option WITH NOCHECK lors de la création de la clé. Oui, je sais que ça va casser quand vous essayez de mettre à jour un ensemble de résultats brisés.

+0

Oui, SSMS est assez bête quand il s'agit d'appliquer des changements (je ne l'insulte pas en disant stupide - dans ce cas je veux dire qu'il applique des changements par force brute), donc si vous voulez avoir le contrôle des changements , il vaut mieux écrire le T-SQL pour appliquer les modifications manuellement. –

Questions connexes