Ich bin mir sicher, dass dies eine ziemlich häufige Abfrage sein könnte, aber bisher keine gute Antwort finden konnte.SQL, Wie ändert man die Spalte in der SQL-Tabelle, ohne andere Abhängigkeiten zu brechen?
Hier ist meine Frage:
ich einen Tisch Kontakte mit varchar Spalte Titel benannt haben. Jetzt in der Mitte der Entwicklung möchte ich Feld ersetzen Titel mit TitleID die Fremdschlüssel zu ContactTitles Tabelle ist. Im Moment Tabelle Kontakte hat über 60 Abhängigkeiten (andere Tabellen, Ansichten Funktionen).
Wie kann ich das am sichersten und einfachsten machen?
Wir verwenden: MSSQL 2005, Daten wurden bereits migriert, wollen nur Schema ändern.
Edit:
Dank an alle für die schnelle Wiedergabe.
Wie es Kontakte Tisch verfügt über mehr als 60 Familienangehörige erwähnt, aber wenn folgende Abfrage ausgeführt wurde, so dass sie nur 5 von Titel Spalte. Das Migrationsskript wurde ausgeführt, daher sind keine Datenänderungen erforderlich.
/*gets all objects which use specified column */
SELECT Name FROM syscomments sc JOIN sysobjects so ON sc.id = so.id WHERE TEXT LIKE '%Title%' AND TEXT LIKE '%TitleID%'
Dann ging ich durch diese 5 Ansichten und manuell aktualisiert.
Sie müssen ein wenig vorsichtig in SQL2005 damit sein. Wenn irgendwelche Definitionen> 4000 Zeichen lang sind, können sie auf zwei Zeilen verteilt werden, die Abfrage in meinem Post ist sicherer (oder es wäre eigentlich besser, sys.sql_modules zu verwenden). Ich nehme an, Sie benutzen nie '*', das könnte Dinge auch vermasseln? –
@Martin Smith du hast Recht, aber ich war mehr nach den Orten, wo diese Spalten verwendet wurden. – cinek
was ich meine, ist es eine winzige Chance, dass die Definition so aufgeteilt ist, dass eine Zeile endet "... Tit" und die nächste entsprechende Zeile beginnt "le ..." so die LIKE-Abfrage wird es verpassen. –