Jeśli dodaję kolumnę do tabeli w programie Microsoft SQL Server, czy mogę kontrolować, gdzie kolumna jest wyświetlana logicznie w zapytaniach?
Nie chcę mieszać w fizycznym układzie kolumn na dysku, ale chciałbym logicznie grupować kolumny, jeśli to możliwe, aby narzędzia takie jak SQL Server Management Studio wyświetlały zawartość tabeli w wygodny sposób.
Wiem, że mogę to zrobić za pomocą programu SQL Management Studio, przechodząc do ich trybu „projektowania” tabel i przeciągając kolejność kolumn, ale chciałbym móc to zrobić w surowym języku SQL, aby móc wykonać porządkowanie skrypty z wiersza poleceń.
sql-server
Fastcall
źródło
źródło
Odpowiedzi:
Nie możesz tego zrobić programowo (to znaczy w bezpieczny sposób) bez tworzenia nowej tabeli.
Po zatwierdzeniu zmiany kolejności Enterprise Manager tworzy nową tabelę, przenosi dane, a następnie usuwa starą tabelę i zmienia nazwę nowej tabeli na istniejącą.
Jeśli chcesz, aby kolumny były w określonej kolejności / grupowaniu bez zmiany ich fizycznej kolejności, możesz utworzyć widok, który może być dowolny.
źródło
Myślę, że tym, czego tu brakuje, jest to, że chociaż nie każdy musi radzić sobie z dziesięcioleciami, dwudziestymi lub tysiącami przypadków tego samego systemu oprogramowania zainstalowanego w całym kraju i na świecie ... ci z nas, którzy projektują oprogramowanie sprzedawane na rynku, robią to. W rezultacie z czasem rozbudowujemy systemy, rozszerzamy tabele, dodając pola, ponieważ potrzebne są nowe możliwości, a po zidentyfikowaniu tych pól należą one do istniejącej tabeli i jako takie przez ponad dekadę rozszerzaliśmy, powiększaliśmy, dodawaliśmy pola itp. do tabel ... a następnie konieczność pracy z tymi tabelami od projektu, przez wsparcie, po czasami zagłębianie się w surowe dane / rozwiązywanie problemów w celu debugowania nowych błędów funkcjonalnych ... niezwykle irytujące jest brak podstawowych informacji, które chcesz zobacz w pierwszej garści pól,
Często żałowałem, że nie mogę tego zrobić, właśnie z tego powodu. Ale poza robieniem dokładnie tego, co robi SQL, budowanie skryptu tworzenia dla nowej tabeli tak, jak chcę, pisanie do niego wstawki, a następnie usuwanie wszystkich istniejących ograniczeń, relacji, kluczy, indeksu itp. Itd. Z istniejącej tabeli i zmiana nazwy „nowa” tabela z powrotem do starej nazwy, a następnie odczytanie wszystkich tych kluczy, powiązań, indeksu itp.
Jest nie tylko żmudne i czasochłonne, ale ... za pięć lat będzie musiało się powtórzyć ...
Jest tak blisko wartości tej ogromnej ilości pracy, ale chodzi o to ... nie będzie to ostatni raz, kiedy będziemy potrzebować tej umiejętności, ponieważ nasze systemy będą nadal rosły, rozszerzały się i otrzymywały pola w zwariowanej kolejności napędzanej przez potrzeby / dodatki projektowe.
Większość programistów myśli z punktu widzenia pojedynczego systemu, który obsługuje jedną firmę lub bardzo specyficzny rynek twardych pudełek.
Zwykli, ale zdecydowanie postępowi projektanci i liderzy rozwoju w swojej przestrzeni rynkowej zawsze będą musieli zmierzyć się z tym problemem w kółko ..... z chęcią skorzystaliby z kreatywnego rozwiązania, gdyby ktoś je miał. Mogłoby to z łatwością zaoszczędzić mojej firmie kilkanaście godzin tygodniowo, bez konieczności przewijania lub zapamiętywania, gdzie w tabeli danych źródłowych znajduje się „to” pole ....
źródło
FieldID Guid
,OrderBy int
. Gotowe. Następnie SSMS lubSELECT *
używa tego. Wyłącz to, jeśli jesteś idealnym DBA i nie chcesz tego. Bardzo frustrujące. A teraz moje stoły są na tyle duże, że nie mogę już tego brutalnie na siłę.Jeśli rozumiem Twoje pytanie, chcesz wpłynąć na to, które kolumny są zwracane jako pierwsze, drugie, trzecie itd. W istniejących zapytaniach, prawda?
Jeśli wszystkie zapytania są napisane za pomocą
SELECT * FROM TABLE
- pojawią się na wyjściu tak, jak są ułożone w SQL.Jeśli twoje zapytania są pisane
SELECT Field1, Field2 FROM TABLE
- to kolejność ich ułożenia w SQL nie ma znaczenia.źródło
Kiedy Management Studio to robi, tworzy tabelę tymczasową, kopiuje wszystko w poprzek, usuwa pierwotną tabelę i zmienia nazwę tabeli tymczasowej. Nie ma prostego odpowiednika instrukcji T-SQL.
Jeśli nie masz ochoty tego robić, zawsze możesz utworzyć widok tabeli z kolumnami w żądanej kolejności i użyć tego?
Edycja: pobity!
źródło
Jest jeden sposób, ale tylko tymczasowo dla samego zapytania. Na przykład,
Powiedzmy, że masz 5 stołów. Tabela nazywa się
T_Testing
FirstName, LastName, PhoneNumber, Email i Member_ID
chcesz, aby wyświetlał ich identyfikator, nazwisko, imię, nazwisko, telefon i e-mail.
Możesz to zrobić zgodnie z Select.
Select Member_ID, LastName, FirstName, PhoneNumber, Email From T_Testing
Poza tym, jeśli z jakiegoś powodu chcesz, aby LastName było wyświetlane przed imieniem, możesz to również zrobić w następujący sposób:
Select LastName, * From T_Testing
Jedyne, co chcesz być pewien, to fakt, że funkcja OrderBy lub Where musi być oznaczona jako Table. Column, jeśli zamierzasz używać opcji Where lub Order By
Przykład:
Select LastName, * From T_Testing Order By T_Testing.LastName Desc
Mam nadzieję, że to pomoże, rozgryzłem to, ponieważ musiałem to zrobić sam.
źródło
Wszystko, co naprawdę robi skrypt, to utworzenie drugiej tabeli tabeli z żądanymi kolejnością kolumn, skopiowanie do niej wszystkich danych, usunięcie oryginalnej tabeli, a następnie zmiana nazwy tabeli dodatkowej, aby ją zastąpić. Oszczędza to jednak samodzielnego pisania, jeśli potrzebujesz skryptu wdrażania.
źródło
Można to zrobić za pomocą SQL, modyfikując bezpośrednio tabele systemowe. Na przykład spójrz tutaj:
Zmień tabelę - dodaj nową kolumnę pomiędzy
Nie polecałbym jednak gry przy stołach systemowych, chyba że jest to absolutnie konieczne.
źródło
Nie można zmienić kolejności kolumn bez odtworzenia całej tabeli. Jeśli masz tylko kilka wystąpień bazy danych, możesz użyć do tego programu SSMS (wybierz tabelę i kliknij przycisk „projekt”).
Jeśli masz zbyt wiele instancji dla procesu ręcznego, powinieneś wypróbować ten skrypt: https://github.com/Epaminaidos/reorder-columns
źródło