Jako tytuł mam istniejącą tabelę, która jest już wypełniona 150000 rekordów. Dodałem kolumnę Id (która jest obecnie pusta).
Zakładam, że mogę uruchomić zapytanie, aby wypełnić tę kolumnę liczbami przyrostowymi, a następnie ustawić jako klucz podstawowy i włączyć automatyczne zwiększanie. Czy to właściwy sposób postępowania? A jeśli tak, jak wypełnić początkowe liczby?
sql-server
sql-server-2008
primary-key
alter-table
Strachofawhackplanet
źródło
źródło
ALTER TABLE ORDER ALTER COLUMN ORDERNO RESTART WITH 1
ale nie chciałem tego próbować bez konsultacji z ekspertem :) Ref. pic.dhe.ibm.com/infocenter/iseries/v7r1m0/…alter table attachments add ATTACHMENT_NUMBER int identity (1000, 1)
PRIMARY KEY
implikacje, któreNOT NULL
są na miejscu - więc znowu - nie jest to absolutnie konieczne. Ale wolę być wyraźny i dlatego zawsze mam toNOT NULL
, żeby być absolutnie jasnymPRIMARY KEY
, indeks klastrowany jest tworzony automatycznie (chyba że wyraźnie to określiszNONCLUSTERED
)Nie można „włączyć” TOŻSAMOŚCI: jest to przebudowa stołu.
Jeśli nie zależy ci na kolejności numerów, dodajesz kolumnę, NIE NULL, z TOŻSAMOŚCIĄ za jednym razem. 150 tys. Rzędów to niewiele.
Jeśli chcesz zachować pewną kolejność numerów, dodaj odpowiednio liczby. Następnie użyj projektanta tabel SSMS, aby ustawić właściwość TOŻSAMOŚĆ. Umożliwia to wygenerowanie skryptu, który wykona dla ciebie kolumnę upuszczania / dodawania / przechowywania numerów / ponownego wybierania.
źródło
ALTER TABLE ... SWITCH
można to zrobić bez tego.Miałem ten problem, ale nie mogłem użyć kolumny tożsamości (z różnych powodów). Zdecydowałem się na to:
Pożyczony stąd .
źródło
Jeśli kolumna już istnieje w tabeli i ma wartość NULL, możesz zaktualizować kolumnę za pomocą tego polecenia (zamień identyfikator, tablename i tablekey):
źródło
Kiedy dodamy kolumnę tożsamości i w istniejącej tabeli, zostanie ona automatycznie wypełniona bez potrzeby wypełniania jej ręcznie.
źródło
przez projektanta możesz ustawić tożsamość (1,1) kliknij prawym przyciskiem myszy tbl => desing => częściowo w lewo (prawy przycisk myszy) => właściwości => w kolumnach tożsamości wybierz #kolumnę
Nieruchomości
kolumna osobowości
źródło
Jeśli twoja tabela ma związek z innymi tabelami za pomocą klucza podstawowego lub klucza foriegen, może nie być możliwe zmodyfikowanie tabeli. więc musisz upuścić i ponownie utworzyć tabelę.
Aby rozwiązać te problemy, musisz wygenerować skrypty, klikając prawym przyciskiem myszy bazę danych, aw opcji zaawansowanej ustaw typ danych do skryptu na schemat i dane. następnie za pomocą tego skryptu wraz ze zmianą kolumny w celu zidentyfikowania i ponownego wygenerowania tabeli za pomocą jej zapytania
Twoje zapytanie będzie takie jak tutaj:
źródło
Oto pomysł, który możesz wypróbować. Oryginalna tabela - brak kolumny tabeli tożsamości 1 utwórz nową tabelę - wywołaj tabelę 2 wraz z kolumną tożsamości. skopiuj dane z tabeli 1 do tabeli 2 - kolumna tożsamości jest zapełniana automatycznie numerami automatycznie zwiększanymi.
zmień nazwę oryginalnej tabeli - table1 na table3 zmień nazwę nowej tabeli - table2 na table1 (oryginalna tabela) Teraz masz table1 z kolumną tożsamości dołączoną i wypełnioną dla istniejących danych. po upewnieniu się, że nie ma problemu i działa poprawnie, upuść tabelę3, gdy nie będzie już potrzebna.
źródło
Utwórz nową tabelę z inną nazwą i tymi samymi kolumnami, powiązaniem klucza głównego i klucza obcego i połącz to w instrukcji wstawiania kodu. Na przykład: W przypadku PRACOWNIKA należy zastąpić PRACOWNIKA.
Musisz jednak usunąć istniejącą tabelę PRACOWNIKA lub dokonać pewnych dostosowań zgodnie ze swoimi wymaganiami.
źródło
Ta odpowiedź jest niewielkim dodatkiem do najwyżej głosowanej odpowiedzi i działa w przypadku programu SQL Server. Pytanie wymagało klucza podstawowego automatycznego przyrostu, aktualna odpowiedź dodaje klucz podstawowy, ale nie jest oznaczane jako automatyczne zwiększenie. Poniższy skrypt sprawdza kolumny, istnienie i dodaje je z włączoną flagą autoinkrementacji.
źródło
źródło
zmień tabelę / ** wklej nazwę tabala ** / dodaj id int TOŻSAMOŚĆ (1,1)
usuń z / ** wklej nazwę tabala ** / gdzie id
(
wybierz a. id Z / ** wklej nazwę tabala / jako LEWĄ DOŁĄCZ DO ZEWNĘTRZNEGO (WYBIERZ MIN (id) jako id Z / wklej nazwę tabala / GROUP BY / wklej kolumny c1, c2 .... ** /
GDZIE t1.id jest NULL
)
zmień tabelę / ** wklej nazwę tabala ** / DROP COLUMN id
źródło
Spróbuj czegoś takiego (najpierw na stole testowym):
W ogóle tego nie testowałem, więc bądź ostrożny!
źródło
IDENTITY
kolumn) i i tak by nie działało.UPDATE your_table SET your_id_field = MAX(your_id_field)+1
nie możesz się tam po prostu rzucićMAX
. Gdzie jestWHERE
klauzula, której należy unikać po prostu wielokrotne aktualizowanie tego samego wiersza?Działa to w MariaDB, więc mam tylko nadzieję, że zadziała w SQL Server: upuść właśnie wstawioną kolumnę identyfikatora, a następnie użyj następującej składni:
ALTER TABLE nazwa_tabeli ADD id INT KLUCZ PODSTAWOWY AUTO_INCREMENT;
Nie potrzebujesz kolejnego stołu. To po prostu wstawia kolumnę id, czyni ją głównym indeksem i zapełnia ją kolejnymi wartościami. Jeśli SQL Server tego nie zrobi, przepraszam za marnowanie twojego czasu.
źródło
ALTER TABLE nazwa_tabeli DODAJ ID KOLUMNY INT NIE NULL KLUCZ PODSTAWOWY AUTO_INCREMENT; To może być przydatne
źródło