Chcę dodać kolumnę do istniejącej starszej bazy danych i napisać procedurę, za pomocą której mogę przypisać każdemu rekordowi inną wartość. Coś jak dodanie kolumny i automatyczne generowanie dla niej danych.
Na przykład, jeśli dodam nową kolumnę o nazwie „ID” (numer), chcę następnie zainicjować unikalną wartość dla każdego z rekordów. Więc moja kolumna ID będzie zawierała rekordy od powiedz 1 to 1000
.
W jaki sposób mogę to zrobić?
sql
sql-server
Adhip Gupta
źródło
źródło
Odpowiedzi:
Będzie to zależeć od bazy danych, ale w przypadku programu SQL Server można to osiągnąć w następujący sposób:
źródło
Prevent saving changes that require table re-creation
odznacz to pole i będziesz mógł dodać kolumnę tożsamości nawet za pomocą gui.Byłoby pomocne, gdybyś opublikował, jakiej bazy danych SQL używasz. W przypadku MySQL prawdopodobnie chcesz auto_increment:
Nie jestem pewien, czy to powoduje zastosowanie tych wartości z mocą wsteczną. Jeśli tak nie jest, powinieneś po prostu móc iterować swoje wartości za pomocą procedury składowanej lub prostego programu (o ile nikt inny nie pisze do bazy danych) i ustawić użycie
LAST_INSERT_ID()
funkcji do wygenerowania wartości id.źródło
dla wyroczni możesz zrobić coś takiego jak poniżej
źródło
I odpowiednik Postgres (druga linia jest obowiązkowa tylko wtedy, gdy chcesz, aby „id” było kluczem):
źródło
Samo użycie ALTER TABLE powinno działać. Dodaj kolumnę z odpowiednim typem i flagą IDENTITY i powinno załatwić sprawę
Sprawdź ten artykuł MSDN http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx na temat składni ALTER TABLE
źródło
dla typu danych UNIQUEIDENTIFIER na serwerze sql spróbuj tego
Jeśli chcesz utworzyć klucz podstawowy z tej kolumny, użyj tego
źródło
Zależy od bazy danych, ponieważ każda baza danych ma inny sposób dodawania numerów sekwencyjnych. Zmieniłbym tabelę, aby dodać kolumnę, a następnie napisać skrypt db w groovy / python / etc, aby wczytać dane i zaktualizować identyfikator sekwencją. Po ustawieniu danych dodałbym do tabeli sekwencję rozpoczynającą się po najwyższej liczbie. Po ustawieniu danych ustaw poprawnie klucze podstawowe.
źródło
Jeśli nie chcesz, aby nowa kolumna była typu
IDENTITY
(autoinkrementacja) lub chcesz dokładnie określić kolejność numerowania wierszy, możesz dodać kolumnę typu,INT NULL
a następnie wypełnić ją w ten sposób. W moim przykładzie nowa kolumna nosi nazwę MyNewColumn, a istniejąca kolumna klucza podstawowego tabeli nosi nazwę MyPrimaryKey.Działa to w SQL Sever 2005 i późniejszych, tj. Wersjach, które obsługują
ROW_NUMBER()
źródło