2013-04-03 11 views
25

Mam sytuacji, gdy trzeba zmienić kolejność kolumn/Dodawanie nowych kolumn do istniejącej tabeli w SQL Server 2008.Jak zmienić kolejność kolumn w istniejącej tabeli w SQL Server 2008

Istniejące kolumny

MemberName 
MemberAddress 
Member_ID(pk) 

i chcę tej kolejności

Member_ID(pk) 
MemberName 
MemberAddress 
+4

nie ma realny sposób zmienić kolejność kolumn - Chociaż SSMS będzie tam udawać jest to w rzeczywistości tworzy nową tabelę, kopiuje dane, usuwa oryginał i zmienia nazwę nowego. Powinieneś po prostu nauczyć się żyć z tym, że kolumny mogą być w dowolnej kolejności i że nie ma żadnego nieodłącznego znaczenia dla porządku. Na dłuższą metę będziesz bardziej produktywny. –

+10

Chociaż wiele osób wskazuje, że kolejność kolumn nie powinna mieć znaczenia, myślę, że brakuje im większego obrazu. Jako deweloperzy nie możemy być jedynymi osobami, które korzystają z bazy danych. Analitycy i im podobni często muszą przeglądać dane, a kolejność kolumn może mieć dla nich duże znaczenie.Kolejność kolumn ułatwia także przeglądanie danych hierarchicznych. – webworm

+1

Uzgodniony webworm. ale poza tym niektóre programy nie są zgodne z najlepszą praktyką. Mam aplikację korzystającą z bazy danych, która jest replikowana. aplikacja zignoruje kolumnę Rowguid dodaną do replikowanej tabeli, o ile jest to ostatnie pole w tabeli. Kolumny dodane po kolumnie Rowguid nie zachowują się poprawnie w aplikacji. Złe programowanie? oczywiście. Ale nie napisałem tego i muszę z tym żyć, dopóki poprawka nie będzie dostępna. –

Odpowiedz

55

Dostałem odpowiedź na to samo, idź na sql server -->Tools-->Option--> designer-->Table and database Designers i unselect prevent saving changes that require table-re creation

enter image description here

2- Otwarte tabeli widoku projektu i przewinąć swoją kolumnę w górę iw dół i zapisać zmiany.

enter image description here

+2

Chcemy tylko wspomnieć, że wygenerowany skrypt SQL Server utworzy tymczasowe tabele, wprowadzi "INSERT INTO" i usunie tabele tymczasowe. To, czego się spodziewasz i nie chcesz ręcznie pisać skryptami. – Maxence

+1

Może być również konieczne zwiększenie limitu czasu, jeśli tabela zawiera dane. – DCShannon

+0

@Aman Czy spowoduje to utratę danych znajdujących się już w tabeli? – f470071

5

Jeśli tabela nie ma żadnych rekordów można tylko kropla następnie utworzyć tabelę.

Jeśli ma rekordy, można to zrobić za pomocą SQL Server Management Studio.

Po prostu kliknij swoją tabelę> prawy przycisk myszy> kliknij Projekt, a następnie możesz uporządkować kolejność kolumn, przeciągając pola w żądanej kolejności, a następnie kliknij przycisk Zapisz.

Pozdrawiam

1

polegając na kolejność kolumn jest ogólnie zły pomysł w SQL. SQL opiera się na teorii relacyjnej, której porządek nigdy nie jest gwarantowany - według projektu. należy traktować wszystkich kolumn i wierszy, jak nie mając kolejności, a następnie zmienić swoje zapytania, aby zapewnić poprawne wyniki:

Na kolumnach:

  • Staraj się nie używać SELECT *, ale zamiast określić kolejność kolumn na liście wyboru w następujący sposób: SELECT Member_ID, MemberName, MemberAddress from TableName. To zagwarantuje zamówienie i ułatwi konserwację, jeśli kolumny zostaną dodane.

dla wierszy:

  • kolejność wierszy w zbiorze wynikowym jest zagwarantowane tylko wtedy, gdy podasz ORDER BY.
  • Jeśli nie podano klauzuli ORDER BY, zestaw wyników może się różnić, ponieważ plan zapytania może się różnić lub strony bazy danych mogły ulec zmianie.

Nadzieja to pomaga ...

+0

ya Sql Heroes to zadziała – Aman

+0

Kolejność wierszy może nie mieć znaczenia przy odpytywaniu bazy danych, ale ma wpływ na to, jak kolumny są wyświetlane w graficznym interfejsie SMS, co jest jedynym powodem, dla którego tu jestem. – DCShannon

+1

@DCShannon Jako aktualizacja - i jeśli zamawianie kolumn jest największym problemem, możesz wystawić tabelę za pomocą widoku, użyj SELECT Member_ID, MemberName, MemberAddress z TableName, aby zdefiniować swój widok. Gdziekolwiek odwołasz się do swojego stołu, możesz po prostu odwołać się do swojego widoku. Następnie twoje kolumny będą zamawiane tak samo za każdym razem, gdy widok wyraźnie określi tę kolejność. – Charl

2

Próbowałem tego i nie widać żadnych sposób to zrobić.

Oto moje podejście do tego.

  1. prawym przyciskiem myszy na stole i stół dla Script Tworzenie i mieć to na jednego okna zapytań SQL,
  2. EXEC sp_rename 'Employee', 'Employee1' - Oryginalna nazwa tabeli jest urzędnik
  3. Execute Pracownik utworzyć skrypt, upewnij się, ułóż kolumny tak, jak potrzebujesz.
  4. INSERT INTO TABLE2 SELECT * FROM TABLE1. - Wstaw do pracownika wybierz Nazwa, Firma od pracownika1
  5. DROP table Employee1.
9

Nie jest to możliwe z instrukcją ALTER.Jeśli chcesz mieć kolumny w określonej kolejności, będziesz musiał utworzyć nową tabelę, użyj INSERT INTO newtable (col-x, col-a, col-b) SELECT col-x, col-a, col-b FROM oldtable do przeniesienia danych z oldtable do newtable, usuń oldtable i zmień nazwę newtable na oldtable name.

Nie jest to zalecane, ponieważ nie ma znaczenia, która kolejność kolumn znajduje się w tabeli bazy danych. Gdy używasz instrukcji SELECT, możesz nazwać kolumny i odesłać je w żądanej kolejności.

0

To może być problem przy korzystaniu kontrola źródła i zautomatyzowane wdrożeń do udostępnionego środowiska programistycznego. Gdzie pracuję, mamy bardzo dużą próbkę DB na naszym poziomie rozwoju do pracy (podzbiór naszych danych produkcyjnych).

Ostatnio zrobiłem trochę pracy, aby usunąć jedną kolumnę ze stołu, a następnie dodać kilka dodatkowych na końcu. Następnie musiałem cofnąć usunięcie kolumny, więc dodałem ją ponownie na końcu, co oznacza, że ​​tabela i wszystkie referencje są poprawne w środowisku, ale automatyczne wdrażanie kontroli kodu źródłowego nie będzie działać, ponieważ narzeka na zmianę definicji tabeli.

Prawdziwym problemem jest to, że indeksy są stół + ~ 120GB i środowisko ma tylko ~ 60GB za darmo, więc będę musiał albo:

a) Zmiana nazwy istniejących kolumn, które są w złej kolejności, dodać nowe kolumny w odpowiedniej kolejności, należy zaktualizować dane następnie upuść starych kolumn

LUB

b) zmienić nazwę tabeli, należy utworzyć nową tabelę z właściwej kolejności, włóż do nowej tabeli ze starego i usuwać od dawna, kiedy jedzie

Schemat SSMS/TFS porównuje opcję użycia tabeli temp., Ponieważ nie ma wystarczającej ilości miejsca na dysku, aby to zrobić.

Nie próbuję powiedzieć, że jest to najlepszy sposób na sprawdzenie, czy kolejność kolumn naprawdę ma znaczenie, tylko że mam scenariusz, w którym to jest problem i dzielę się opcjami, o których myślałem. aby rozwiązać ten problem

-3

zapytanie SQL zmienić kolumnę id w pierwszy:

ALTER TABLE `student` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT FIRST; 

lub za pomocą:

ALTER TABLE `student` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT AFTER 'column_name' 
+0

W która wersja programu SQL Server to działa? – nolaspeaker

+0

Brak. To dla MySQL. – Gustav

Powiązane problemy