2009-05-11 8 views
1

Ich habe kurze Frage an Sie SQL-Gurus. Ich habe vorhandene Tabellen ohne Primärschlüssel Spalte und Identität ist nicht festgelegt. Jetzt versuche ich, diese Tabellen zu modifizieren, indem ich die vorhandene Integer-Spalte als Primärschlüssel verwende und Identitätswerte für diese Spalte hinzufüge. Meine Frage ist, sollte ich zuerst alle Datensätze aus der Tabelle in eine temporäre Tabelle kopieren, bevor Sie diese Änderungen vornehmen. Verliere ich alle vorherigen Datensätze, wenn ich die T-SQL-commnad ausgeführt habe, um den Primärschlüssel zu erstellen und die Identitätsspalte für diese Tabellen hinzuzufügen. Was sind die Ansätze sollte ich so nehmen, wiePrimärschlüssel und Identitätsspalte nach dem Laden von Daten

1) Erstellen Sie temporäre Tabelle alle Datensätze aus der Tabelle zu kopieren, zu modifizieren 2) Legen Sie alle Datensätze der temptable 3) Nehmen Sie Änderungen an der Tabellenschema 4) Laden Sie abschließend die Datensätze aus der temporären Tabelle in die ursprüngliche Tabelle.

Oder

gibt es bessere Möglichkeiten, dass dies? Ich schätze Ihre Hilfe wirklich

Dank

Antwort

3

Hoffentlich haben Sie nicht zu viele Datensätze in der Tabelle. Was passiert, wenn Sie Management Studio verwenden, um ein vorhandenes Feld in eine Identität zu ändern, indem Sie eine andere Tabelle mit dem festgelegten Identitätsfeld erstellen? Es aktiviert die Identity-Einfügung und gibt die Datensätze aus der Originaltabelle aus und deaktiviert dann die Identity-Einfügung. Dann löscht es die alte Tabelle und benennt die soeben erstellte Tabelle um. Dies kann ein ziemlich langwieriger Prozess sein, wenn Sie viele Datensätze haben. Wenn das der Fall ist, würde ich das Skript ausführen und es dann in einem Job machen, der während der arbeitsfreien Zeit ausgeführt wird, weil die Tabelle währenddessen vollständig gesperrt wird.

+0

Vielen Dank, ich mochte deine Antwort. – Shiva

0

Wenn Ihre vorhandene Integer-Spalte einzigartig und geeignet ist, sollte es kein Problem sein, es zu einer PK zu konvertieren. Wenn Sie die vorhandene Spalte nicht verwenden möchten, können Sie der Haupttabelle eine neue PK-Spalte hinzufügen, sie auffüllen und als Startwert verwenden. Anschließend führen Sie update-Anweisungen aus, um alle anderen Tabellen mit neuer PK zu aktualisieren.

Egal, wie Sie es tun, stellen Sie sicher, dass Sie zuerst eine Sicherungskopie machen !!

2

machen Sie einfach alle Ihre Änderungen in Management Studio, Kopieren Sie das generierte Skript in eine Datei. Speichern Sie an dieser Stelle KEINE ÄNDERUNGEN. Schauen Sie nach und bearbeiten Sie dieses Skript nach Bedarf, es wird wahrscheinlich fast genau das tun, was Sie denken (es wird die ursprüngliche Tabelle löschen und den temporären Namen in den ursprünglichen umbenennen), aber alle Einschränkungen und FKs auch behandeln.

+0

ein weiterer zusätzlicher Tipp, der hilft, einen Scrip zu erstellen, um es bei Nacht zu betreiben .. danke –

4

Extras> Optionen> Designer> Tabelle und Datenbank-Designer

Uncheck „Verhindern, dass die Änderungen zu speichern, die Tabelle Neuschöpfung erfordern“

[Bearbeiten] Ich habe schon versucht, diese mit ausgefüllten Tabellen und ich nicht Daten verlieren, aber ich weiß nicht viel darüber.

+0

Danke für den Tipp ...es rettete mir Zeit, um die Abfrage zu tun :) –

0

Sie können die IDENTITY-Spalte immer hinzufügen, nachdem Sie Ihre Daten kopiert haben. Sie können den IDENTITY-Seed auch auf die maximale Ganzzahl + 1 zurücksetzen. Das sollte Ihre Probleme lösen.

DBCC CHECK ('MyTable', RESEED, n)

wobei n die Nummer, die Sie die Identität beginnen soll.

Verwandte Themen