2009-09-02 5 views
5

Ich wollte eine Spalte in einer Tabelle SQL Server 2005 zu IDENTITY (1,1)
Übrigens ist diese Tabelle leer und die Spalte geändert werden, ist ein Primärschlüssel.
Diese Spalte ist auch ein Fremdschlüssel für zwei andere Tabellen.
sql server helper gespeicherte Prozedur oder Dienstprogramm für alter Tabelle Spalte IDENTITY (1,1) ändern

Nach dem Googling habe ich festgestellt, dass Sie die Alter Tabellensyntax nicht verwenden können, um eine Spalte zu ändern und sie zu einer Indentity-Spalte zu machen.
Link # 1: How do I add the identity property to an existing column in SQL Server
Link # 2: Adding an identity to an existing column -SQL Server

ich die abhängigen Tabellen Prüfung endete (2 davon) Entfernen der Fremdschlüssel dann (das Skript von SSMS generiert) die Haupttabelle dann fallen wieder -Erstellen mit Identität. (Könnte die Umbenennungsoption auch hier ausprobieren)
Dann wurden die Fremdschlüssel für die früheren abhängigen zwei Tabellen neu erstellt.

Aber all dies war manuelle Arbeit, irgendwelche Skripte oder SPs da draußen, um dies zu erleichtern.

Im Idealfall alle diese Schritte würden durch ein solches Skript/Werkzeug/Dienstprogramm erfolgen:

Schlüssel
  1. prüfen abhängigen Tabellen
  2. Schaffen erzeugen und Drop-Fremdschlüssel-Skripte für diese
  3. Schaffen erzeugen Skript für die Haupttabelle
  4. die Haupttabelle löschen (oder die Tabelle umbenennen, wenn die Tabelle Daten enthält)
  5. neu erstellen Sie die Tabelle mit Identitätsspalte aktiviert
  6. neu erstellen Fremdschlüssel

Antwort

4

Sie SSMS verwenden können ein Skript (Bearbeiten einer Tabelle, speichern Skript) zu erzeugen, aber ansonsten ist es ein manueller Prozess wie du es identifizierst.

Die SSMS-Skripte werden Abhängigkeiten etc. aufnehmen. Für diese Art von Arbeit verwende ich SSMS, um ein Basisskript zu generieren, pimpe es ein bisschen, führe es sorgfältig aus und verwende dann ein Vergleichstool (wie Red Gate vergleichen)) um eine sicherere Version zu generieren.

Edit: The SSMS error is not an error, it's a safety check that can be switched off

+0

+1, es gibt so viele Dinge zu ändern mit Tabellen/Spalten/Schlüssel/Constraints/etc. es wäre unmöglich, für jeden ein Dienstprogramm zu haben. Deshalb können Sie die GUI verwenden, um ein Skript zu generieren –

+1

SSMS löst einen Fehler aus, das war die erste Option, die ich ausprobiert habe. Sollte in der Frage erwähnt haben ... –

+0

Danke für den Link, Deaktivieren der Option funktionierte wie ein Charme. –

2

(. Dies ist lediglich ein Follow-up zu gbn der Post mit mehr Details - es ist nicht so einfach ist, dieses Zeug, um herauszufinden) (

Es ist nicht unmöglich, ein Programm zu schreiben, das nur sehr komplex und sehr hart Glücklicherweise hat Microsoft bereits getan, es zu tun - seine genannte SSMS (oder SMO?) ein solches Skript zu generieren.

  • im Objekt. Explorer, führen Sie einen Drilldown zu der Datenbank und der Tabelle durch, die Sie ändern möchten Klicken Sie mit der rechten Maustaste und wählen Sie Design

  • Nehmen Sie die gewünschten Änderungen an der einen Tabelle im Design-Bildschirm vor. Es ist einigermaßen intuitiv.

  • Um die Eigenschaft identity hinzuzufügen/zu entfernen, wählen Sie die Spalte im oberen Bereich aus und im unteren Bereich/"Spalteneigenschaften" erweitern und konfigurieren Sie die Einstellungen unter "Identity Specification".

  • Um ein Skript zum Implementieren all Ihrer Änderungen zu generieren, das alle abhängigen Schlüsseländerungen enthält, klicken Sie auf die Schaltfläche "Change Script erzeugen". Dies ist auch eine Option im Menü "Table Designer".

ich dies auch Skripte zu generieren (die ich später ändern -. SSMS nicht immer die effizienteste Code erzeugen) Ist das erledigt, können Sie verlassen, ohne die Änderungen zu speichern - so dass Sie einen DB Sie können Ihr neues Skript testen.

+0

Danke, ich wusste nicht, ob ich Details gehen sollte ... – gbn

+0

Ich bin erst zufällig über dieses Feature zufällig gestolpert. Schon früh hat mir das Generieren und Überprüfen dieser Skripte viel über SQL gelehrt; Später führte es mich zu vielen Möglichkeiten, wie man nicht SQL schreibt. (Ich denke, der von SSMS generierte Code ist - muss mit SQL über 7.0 und vielleicht früher kompatibel sein?) –

+0

Ich habe das bereits versucht, tatsächlich war dies das erste, was ich ausprobierte. Ich gebe eine Fehlermeldung "Änderungen speichern nicht erlaubt. Die Änderungen, die Sie vorgenommen haben, erfordern, dass die folgende Tabelle gelöscht wird ............ die Tabelle neu erstellt werden muss" –

0
  1. Tropfen der pk und bauen die gleichen Datentyp Spalte
  2. kopieren Sie die Daten der Spalte, die Sie Identität in die neue Spalte festlegen möchten.
  3. die alte Säule
  4. Reset Primärschlüssel

ALTER TABLE Userrole DROP CONSTRAINT PK_XX ALTER TABLE XX

fallen ADD newX nicht null Identität int (1,1) Primärschlüssel

Aktualisierung XX Satz newX = altX

alter Tabelle XX DROP COLUM N oldX

Dies ist die einfachste Methode zum Festlegen der Identitätsspalte. Wenn Sie das lange generierte Skript nicht verwenden möchten.

Verwandte Themen