Ich aktualisiere massenhaft eine SQL Server-Datenbank. Ich ändere alle unsere numeric(38,0)
Spalten in int
(ja, SQL Server-Skripte wurden aus Oracle-Skripten erstellt) . Mit SMO und C # (ich bin ein SW-Ingenieur) konnte ich wirklich nette Skripte generieren, wie es SQL Server Management Studio tun würde. Es funktioniert alles sehr gut, bis auf ein bestimmtes Problem:
Wenn ich eine Handvoll Tabellen aufrufe, ALTER TABLE [myTable] ALTER COLUMN [columnA] INT
wird beschlossen, auch die Spalte von zu ändern NOT NULL to NULL
. Das ist natürlich ein großes Problem, da ich Primärschlüssel für die meisten dieser Tabellen in diesen bestimmten Spalten neu generieren muss.
Natürlich habe ich mit SMO viele Optionen, um herauszufinden, welche Spalten Primärschlüssel sind, und um zu erzwingen, dass sie nach oder während der Aktualisierung des Datentyps NICHT NULL sind, aber ich bin wirklich gespannt, was dies verursachen kann.
quelle
Antworten:
Dies hängt von Ihrer Einstellung von SET ANSI_NULL_DFLT_OFF oder SET ANSI_NULL_DFLT_ON ab (lesen Sie diese auch für andere Effekte aus SET ANSI_DEFAULTS).
Persönlich hätte ich diese Einschränkung explizit angegeben, wenn ich Null- oder Nicht-Null-Spalten wollte, anstatt mich auf Umgebungseinstellungen zu verlassen.
Sie können diesen Befehl erneut ausgeben. Wenn eine Spalte bereits die gewünschte Nullfähigkeit aufweist, wird der Befehl ignoriert.
Sie haben jedoch auch gesagt, dass Sie es nur dort ändern müssen, wo es Teil eines Primärschlüssels ist. Dies sollte keinen Einfluss darauf haben, ob eine Spalte in der Modellierungs- / Implementierungsphase auf Null gesetzt werden kann oder nicht
quelle
SET ANSI_NULL_DFLT_ON
trifft hier nicht zu. ANSI_NULL-Standardeinstellungen sind für ALTER COLUMN immer aktiviert. Wenn nicht angegeben, ist die Spalte nullwertfähig.