2010-08-04 8 views
5

J'utilise une base de données MS SQL Server et j'utilise beaucoup de vues (à utiliser avec un mappeur O/R). Un peu ennui est que je voudraiscomment gérer les mises à jour du schéma db lors de l'utilisation de schemabinding et de mise à jour souvent

  • schéma utilisation contraignant
  • mise à jour avec des scripts (pour déployer sur les serveurs et mettre dans un système de contrôle de code source)

mais courir dans la question quand je veux par exemple ajouter une colonne à une table, je dois d'abord abandonner toutes les vues qui référencent cette table, mettre à jour la table, puis recréer les vues, même si les vues n'auraient pas besoin d'être mises à jour autrement. Cela rend mes scripts de mise à jour beaucoup plus longtemps et, en regardant les différences dans le système de contrôle de la source, il est plus difficile de voir quel était le changement réel.

Y a-t-il une meilleure façon de gérer cela?

Je dois toujours pouvoir utiliser des mises à jour SQL simples et contrôlables par source. Un générateur de code comme est inclus dans SQL Server Management Studio serait utile, mais j'ai eu des problèmes avec SQL Server Management Studio en ce qu'il tend à créer du code qui ne spécifie pas les noms de certains index ou contraintes (par défaut). Mais je veux avoir des dbs identiques quand j'exécute mes scripts sur différents systèmes, y compris les noms de toutes les contraintes etc, de sorte que je n'ai pas à sauter à travers les boucles lors de la mise à jour de ces contraintes plus tard. Alors, peut-être un générateur de code SQL plus intelligent serait-il une solution?

Mon flux de travail est maintenant:

Type
  • la déclaration alter table dans l'éditeur de requête
  • vérifier si je reçois une déclaration d'erreur comme "cannot ALTER 'XXX' because it is being referenced by object 'YYY'."
  • utiliser SQL Server Managment studio moi à l'écriture du code create pour l'objet référencé
  • insérer une déclaration drop avant l'instruction alter et créer déclaration après
  • vérifier si la déclaration drop crée erreur et répéter

Cela m'agace, mais peut-être je dois simplement vivre avec si je veux continuer à utiliser le schemabinding et les mises à jour de script ...

Répondre

2

Vous pouvez au moins éliminer le "vérifier si je g et une erreur "étape en interrogeant quelques fonctions de gestion dynamiques et les vues du système pour trouver vos dépendances. This article donne une explication décente de la façon de le faire. Au-delà de ça, je pense que tu as raison, tu ne peux pas avoir ton gâteau et le manger aussi avec un schéma-contraignant. Gardez également à l'esprit que la suppression ou la création de vues entraînera la perte des autorisations accordées sur ces objets. Ces autorisations doivent donc également figurer dans vos scripts.

+1

Oh, bien. Je suppose que je vais vivre avec ça. Idéalement ce que je voudrais est: a) aucun message d'erreur si la mise à jour de table n'affecte pas vraiment les vues (par exemple l'ajout d'une nouvelle colonne ne devrait pas affecter les affichages en lecture seule sur cette table) b) (par exemple en laissant tomber une colonne qui est utilisée dans une vue) Mais je suppose que MSSQL ne fonctionne tout simplement pas de cette façon (peut-être pour de bonnes raisons ...) Merci pour le rappel des autorisations! –

Questions connexes