2009-05-14 1 views
3

mon travail que nous rencontrons actuellement des douleurs graves qui poussent nos changements de base de données dans les environnements. Le problème commence à apparaître lorsque nous créons une nouvelle colonne non nullable sur une table existante. Le script généré par SQL Compare crée une colonne non nulle, de sorte qu'il échoue toujours. J'espérais qu'il y avait une alternative à devoir éditer manuellement le script. Y a-t-il un moyen de contourner cela? Si non, comment les gars le manipulez-vous?Existe-t-il un moyen simple d'ajouter un script de migration personnalisé aux scripts de comparaison SQL?

Répondre

0

Créer une table:

create table #bingo (id int) 

Ajouter une valeur:

insert into #bingo values (1) 

Ajouter une nouvelle colonne:

alter table #bingo add userid int 

POPULATE la nouvelle colonne:

update #bingo set userid = 1 where id = 1 

Modifier la nouvelle colonne de ne pas annulable:

alter table #bingo alter column userid int not null 

Vous devez modifier manuellement le Redgate Sql Comparer pour le faire fonctionner comme ça.

0

Comment prévoyez-vous remplir la colonne NOT NULL? Je ne vois pas comment SQL Compare pourrait vraiment trouver une solution, car il n'a aucun moyen de savoir comment vous le remplir.

Vous pouvez créer la colonne avec un DEFAULT, puis ajoutez simplement une déclaration de mise à jour à la fin des scripts générés pour mettre à jour correctement la colonne si vous avez une source pour les valeurs.

+1

J'espérais qu'il y avait un moyen de le configurer de sorte qu'il a créé toutes les colonnes que annulable, puis à gauche un espace pour moi de mettre à jour la table, puis modifier la colonne pour être non annulable. –

0

ajouter un défaut sur la nouvelle colonne non nulle

lors de la création d'une nouvelle colonne non nulle, quelle valeur toutes les lignes existantes se? Si vous ne le savez pas, rendez la colonne nullable.

+0

Cela dépend du changement, mais généralement il est tiré de l'intérieur de la base de données elle-même. –

+0

@Correl, comment pouvez-vous attendre à jamais une nouvelle colonne NOT NULL, sur une table existante (avec des lignes) à travailler toujours, sans défaut? Vous pouvez supprimer la valeur par défaut après la création de la colonne pour forcer votre application à insérer une bonne valeur. –

+2

J'espérais que Redgate me donner une place pour insérer les valeurs dans le script. Comme créer la colonne comme nullable, laissez une section vide pour moi d'ajouter ma logique personnalisée, puis modifiez la colonne comme non-nullable. Je peux le faire à la main, mais j'espérais que RedGate pourrait le rendre plus facile. –

Questions connexes