2009-09-02 11 views
5

Chciałem zmodyfikować kolumnę w tabeli SQL Server 2005 do TOŻSAMOŚCI (1,1)
Nawiasem mówiąc ta tabela jest pusta, a kolumna do zmiany jest kluczem podstawowym.
Ta kolumna jest również kluczem obcym dla dwóch innych tabel.
sql server helper procedura składowana lub narzędzie do zmiany tabeli alter column IDENTYFIKACJA (1,1)

Po uruchomieniu google'a okazało się, że nie można użyć składni tabeli Altera do zmodyfikowania kolumny i uczynienia jej kolumny indentity.
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

skończyło się sprawdzanie tabel zależnych (2 z nich) usuwanie kluczy obcych (generowanych skrypt z SSMS), a następnie spada główną tabelę następnie ponownie - tworzenie tożsamości. (może spróbować również zmienić nazwę tutaj)
Następnie ponownie utworzono klucze obce dla wcześniejszych dwóch zależnych tabel.

Ale wszystko to było pracą ręczną, skrypty lub SP, aby to ułatwić.

Idealnie wszystkie te czynności będą wykonywane przez taki skrypt/narzędzia/terenowy:

  1. Sprawdź tabele zależne klucze
  2. Generowanie tworzenie i usuwanie kluczy skrypty obcych dla tego
  3. Generowanie tworzyć skrypt dla głównej tabeli
  4. upuść główną tabelę (lub zmień nazwę tabeli, jeśli tabela zawiera dane)
  5. ponownie utworzyć tabelę z kolumny tożsamości włączona
  6. ponownego tworzenia kluczy obcych

Odpowiedz

4

Można używać SSMS do generowania skryptu (Edycja tabeli, zapisać skrypt), ale poza tym jest to proces ręczny jak zidentyfikowałeś.

Skrypty SSMS będą zbierać zależności itp. W przypadku tego rodzaju pracy używam SSMS do generowania podstawowego skryptu, trochę go pimp, uruchamiam go ostrożnie, a następnie używam narzędzia porównawczego (np.) w celu wygenerowania bezpieczniejszej wersji.

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

+0

+1, jest tak wiele rzeczy do zmienienia z tabelami/kolumnami/kluczami/ograniczeniami/itd. byłoby niemożliwe posiadanie narzędzia dla każdego. dlatego możesz użyć GUI do wygenerowania skryptu. –

+1

SSMS zgłasza błąd, to była pierwsza opcja, którą próbowałem. Powinien wspomnieć w pytaniu ... –

+0

Dzięki za link, wyłączenie opcji działało jak czar. –

2

(. To jest po prostu kontynuacją postu gbn za więcej szczegółów - to nie jest wcale tak łatwo zrozumieć te rzeczy out) (

Nie niemożliwe napisać narzędzie do tego, tak bardzo skomplikowane i bardzo trudne szczęście, Microsoft już zrobił to zrobić - jego nazwie SSMS (lub SMO?), aby wygenerować taki scenariusz.

  • w obiekcie. Eksploruj, przejdź do bazy danych i tabeli, którą chcesz zmodyfikować Kliknij prawym przyciskiem myszy i wybierz opcję Projekt

  • Wprowadź żądane zmiany do jednej tabeli na ekranie projektu. Jest to dość intuicyjne.

  • Aby dodać/usunąć właściwość tożsamości, wybierz kolumnę w górnym panelu, aw dolnym panelu/"Właściwości kolumny" rozwiń i skonfiguruj ustawienia w "Specyfikacji tożsamości".

  • Aby wygenerować skrypt do wprowadzenia wszystkich zmian, zawierający wszystkie zależne zmiany kluczy, kliknij przycisk "Utwórz skrypt zmiany". Jest to również opcja w menu "Projektant tabel".

ja też to zrobić, aby wygenerować skrypty (który ja później modyfikować. - SSMS nie zawsze produkować najbardziej efektywny kod) Gdy to zrobisz, możesz wyjść bez zapisywania zmian - pozostawiając państwu DB możesz przetestować nowy skrypt.

+0

Dzięki, nie wiedziałem, czy powinnam pójść w szczegóły ... – gbn

+0

Natknąłem się na tę funkcję przypadkowo dawno temu. Na początku generowanie i przeglądanie tych skryptów nauczyło mnie dużo o SQL; później doprowadziło mnie to na wiele sposobów, jak nie pisać kodu SQL. (Domyślam się, że kod wygenerowany przez SSMS jest - musi być - zgodny z SQLem przez 7.0, a może wcześniej?) –

+0

Już wypróbowałem to, w rzeczywistości to była pierwsza rzecz, którą próbowałem. Wystąpił błąd "Zapisywanie zmian nie jest dozwolone, wprowadzone zmiany wymagają usunięcia poniższej tabeli ....... wymagają ponownego utworzenia tabeli" –

0
  1. spadek PK i zbudować taki sam typ danych kolumna
  2. skopiować dane z kolumny, które chcesz ustawić tożsamości do nowej kolumny.
  3. spadek starą kolumnę
  4. zerowania klucz podstawowy

ALTER Tabela UserRole UPUŚĆ CONSTRAINT PK_XX ALTER Tabela XX

ADD newX int niezerowy tożsamość (1,1) za pomocą klucza podstawowego

aktualizacja XX zestaw newX = oldX

alter tabela XX DROP COLUM N oldX

to najprostszy sposób ustawienia kolumny tożsamości. , jeśli nie chcesz używać długo generowanego skryptu.