2009-06-23 3 views
5

Meine Datenbank hat eine Tabelle mit Tausenden von Datensätzen. Der Primärschlüssel ist eine ganze Zahl. Mit dieser Spalte sind viele Fremdschlüsseleinschränkungen verbunden.SQLSERVER: Wie ändert man eine vorhandene Tabelle int Primärschlüssel zu einer Identitätsspalte werden?

Ich möchte diese Spalte zu einem Identitätsschlüssel ändern. Was ist der beste Weg, es zu tun? Ich muss dieses Update auch an die Installationen unserer Kunden senden.

Bonuspunkte für eine Antwort, die 2000

Antwort

11

Es gibt eine großartige Funktion in SQL Server Management Studio, die meinen Tag gerettet hat.

In SSMS gehen Sie zu Optionen -> Designer -> Tabellen- und Datenbank-Designer, markieren Sie "Change-Skripte automatisch generieren" und deaktivieren Sie "Verhindern Speichern von Änderungen, die Tabelle neu erstellen müssen".

Gehen Sie im Objekt-Explorer zu Ihrer Tabelle und wählen Sie die Spalte aus, die die Identitätsspezifikation erhalten soll. Klicken Sie mit der rechten Maustaste und wählen Sie Ändern. Erweitern Sie im Bereich Spalteneigenschaften die Struktur "Identity Specification" und ändern Sie "(Is Identity)" in "yes". Wählen Sie nun in der oberen linken Spalte das Symbol "Skript erstellen". Achten Sie auf die Warnmeldungen.

Jetzt haben Sie ein generiertes Skript, das alle Ihre Constraints fallen lässt, die Tabelle mit Identität neu erstellt und die Einschränkungen neu erstellt. BEEINDRUCKEND!

Ich werde es testen und hier meine Ergebnisse posten.

Update: Alles hat gut funktioniert. Ich habe vergessen in der Frage zu sagen, dass ich das Skript brauche, um die Modifikation in unseren Kundeninstallationen zu reproduzieren.

Diese Seite ist wirklich fantastisch. Die Zeit, die ich verbrachte, um meine eigene Antwort zu schreiben, habe ich 3 andere!

+0

meinst du nicht, dass mein Vorschlag einfacher war? :) – Stuart

+0

@STuart: Es ist die gleiche Lösung, aber Neves speichert sein Skript zuerst. – gbn

+0

@Neves: Enterprise Manager hat die gleiche conecpt von "ändern und speichern" – gbn

1

in Enterprise Manager mit der rechten klicken Sie auf die Tabelle in der Tabellenansicht, wählen Sie Design in SQL Server arbeitet.

klicken die linke Seite der Säule (Dann Doppelklick Identität, das in Spalten unterhalb, in Spalte Eigenschaften, schaltet es, standardmäßig auf Autoinkrement 1

0

Wenn die Spalte eine ganze Zahl als Teil bestehende Beziehungen dann ist es bereits einzigartig.Daher müssen Sie sich nicht um Duplikate kümmern! Das ist ein großer Aufwand schon vermieden.

Sie können entweder einen ALTER TABLE-Befehl, um die Spalte zu ändern, oder Sie können es mit Enterprise Manager tun.

1

Es gibt keine einzelne DDL "ALTER TABLE" zum Ändern eines vorhandenen c olumn zu einer Identitätsspalte. Sie können einer vorhandenen Tabelle nur eine neue Identitätsspalte hinzufügen.

Dies kann in Enterprise Manager durchgeführt werden, aber Sie müssen wissen, dass Sql Server eine neue Tabelle erstellt und Sie Daten im Hintergrund kopieren. Sie haben möglicherweise einige Probleme damit. Hier ist ein Artikel, der das ein wenig mehr erklärt http://www.mssqltips.com/tip.asp?tip=1397

In Ihrem Szenario denke ich, dass Sie eine Kombination aus diesem Skript und etwas zu deaktivieren und wieder aktivieren Ihre fk benötigen.

Verwandte Themen