2009-05-14 6 views
3

Bei meiner Arbeit haben wir derzeit einige ernste Probleme, unsere Datenbankänderungen über Umgebungen hinweg zu schieben. Das Problem tritt auf, wenn wir eine neue Spalte ohne NULL-Beschränkung für eine vorhandene Tabelle erstellen. Das Skript, das von SQL Compare generiert wird, erstellt die Spalte als nicht nullfähig, sodass sie immer fehlschlägt. Ich hatte gehofft, dass es eine Alternative zum manuellen Bearbeiten des Skripts gibt. Gibt es eine Möglichkeit, dies zu umgehen? Wenn nicht, wie gehst du damit um?Gibt es eine einfache Möglichkeit, ein benutzerdefiniertes Migrationsskript zu SQL Compare-Skripten hinzuzufügen?

Antwort

0

Erstellen Sie eine Tabelle:

create table #bingo (id int) 

Wert hinzufügen:

insert into #bingo values (1) 

eine neue Spalte hinzufügen:

alter table #bingo add userid int 

Bestücken Sie die neue Spalte:

update #bingo set userid = 1 where id = 1 

Ändern Sie die neue Spalte nicht auf NULL festlegbare:

alter table #bingo alter column userid int not null 

Sie würden manuell müssen die RedGate Sql bearbeiten vergleichen, um es so zu arbeiten.

0

Wie planen Sie, die Spalte NOT NULL zu füllen? Ich sehe nicht, wie SQL Compare wirklich eine Lösung finden kann, da es keine Möglichkeit hat zu wissen, wie Sie es füllen würden.

Sie könnten die Spalte mit einem DEFAULT erstellen und dann am Ende der generierten Skripts einfach eine Aktualisierungsanweisung hinzufügen, um die Spalte ordnungsgemäß zu aktualisieren, wenn Sie eine Quelle für die Werte haben.

+1

Ich hatte gehofft, es gab einen Weg, um es einzurichten, so dass es alle Spalten als Nullable erstellt, ließ dann einen Platz für mich, um die Tabelle zu aktualisieren, und ändern Sie dann die Spalte nicht Nullable sein. –

0

einen Standard auf den neuen nicht null Spalte hinzufügen

wenn eine neue nicht null Spalte erstellen, welchen Wert erhalte alle vorhandenen Zeilen? Wenn Sie es nicht wissen, machen Sie die Spalte NULL-fähig.

+0

Es hängt von der Änderung ab, aber im Allgemeinen wird es aus der Datenbank selbst gezogen. –

+0

@Correl, wie können Sie jemals erwarten, dass eine neue nicht null Spalte in einer bestehenden Tabelle (mit Zeilen) jemals funktioniert, ohne einen Standard? Möglicherweise möchten Sie den Standard nach dem Erstellen der Spalte entfernen, um zu erzwingen, dass Ihre Anwendung einen guten Wert einfügt. –

+2

Ich hatte gehofft, dass RedGate mir einen Platz geben würde, um die Werte in das Skript einzufügen. Wenn Sie die Spalte als Nullwert definieren möchten, lassen Sie einen leeren Abschnitt für mich, um meine benutzerdefinierte Logik hinzuzufügen und ändern Sie dann die Spalte als nicht nullfähig. Ich kann das mit der Hand machen, aber ich hatte gehofft, dass RedGate es einfacher machen könnte. –