IT박스

테이블의 열을 논리적으로 재정렬 할 수 있습니까?

itboxs 2020. 9. 8. 07:47
반응형

테이블의 열을 논리적으로 재정렬 할 수 있습니까?


Microsoft SQL Server의 테이블에 열을 추가하는 경우 쿼리에서 열이 논리적으로 표시되는 위치를 제어 할 수 있습니까?

디스크에있는 열의 물리적 레이아웃을 엉망으로 만들고 싶지는 않지만 가능한 경우 열을 논리적으로 그룹화하여 SQL Server Management Studio와 같은 도구가 편리한 방식으로 테이블의 내용을 나열하도록하고 싶습니다.

SQL Management Studio를 통해 테이블에 대한 "디자인"모드로 이동하고 열의 순서를 드래그하여이 작업을 수행 할 수 있다는 것을 알고 있지만, 정렬을 수행 할 수 있도록 원시 SQL에서 수행 할 수 있기를 바랍니다. 명령 줄에서 스크립팅됩니다.


새 테이블을 생성하지 않고는 프로그래밍 방식으로 (안전한 방식으로)이를 수행 할 수 없습니다.

재정렬을 커밋 할 때 Enterprise Manager가 수행하는 작업은 새 테이블을 만들고 데이터를 이동 한 다음 이전 테이블을 삭제하고 새 테이블의 이름을 기존 이름으로 바꾸는 것입니다.

물리적 순서를 변경하지 않고 특정 순서 / 그룹으로 열을 원하는 경우 원하는대로보기를 만들 수 있습니다.


여기에있는 모든 사람들이 놓친 것은 모든 사람이 전국과 전 세계에 설치된 동일한 소프트웨어 시스템의 10, 20 또는 1000 인스턴스를 처리해야하는 것은 아니지만 상업적으로 판매되는 소프트웨어를 설계하는 우리 중에는 그렇게한다는 것입니다. 그 결과, 시간이 지남에 따라 시스템을 확장하고 새로운 기능이 필요하면 필드를 추가하여 테이블을 확장합니다. 이러한 필드가 기존 테이블에 속한다는 것이 확인되면 10 년 넘게 필드를 확장, 확장, 추가하는 등의 작업을 수행합니다. 테이블에 .... 그런 다음 설계, 지원, 때로는 원시 데이터를 파고 들어가거나 새로운 기능 버그를 디버그하기위한 문제 해결에 이르기까지 이러한 테이블을 사용해야합니다. .... 원하는 기본 정보가 없다는 사실이 엄청나게 악화되고 있습니다. 처음 소수의 분야에서 볼 수 있습니다.

나는 종종이 정확한 이유 때문에 이것을 할 수 있기를 바랐다. 그러나 SQL이 수행하는 작업을 정확히 수행하지 않고 내가 원하는 방식으로 새 테이블에 대한 스크립트 작성을 작성하고 Insert를 작성한 다음 기존 테이블에서 모든 기존 제약 조건, 관계, 키, 인덱스 등을 삭제하고 이름을 변경합니다. "새"테이블을 이전 이름으로 되 돌린 다음 모든 키, 관계, 색인 등을 읽습니다.

지루하고 시간 소모적 일뿐만 아니라 ... 5 년 후에 다시 발생해야합니다 ....

엄청난 양의 작업의 가치가 너무나도 비슷하지만 요점은 ... 우리의 시스템이 계속해서 성장하고 확장하며 필드를 엉망진창으로 이끌 기 때문에이 능력이 필요한 마지막 시간은 아닐 것입니다. 필요 / 디자인 추가.

대부분의 개발자는 단일 회사 또는 매우 특정한 하드 박스 시장에 서비스를 제공하는 단일 시스템 관점에서 생각합니다.

"기성품"이지만 시장 공간에서 상당히 진보적 인 설계자 및 개발 리더는 항상이 문제를 계속해서 처리해야합니다. 창의적인 솔루션이 있다면 창의적인 솔루션을 좋아할 것입니다. 이렇게하면 스크롤을 내리거나 소스 데이터 테이블에서 "해당"필드가 어디에 있는지 기억할 필요없이 일주일에 12 시간 씩 회사를 쉽게 절약 할 수 있습니다 ....


귀하의 질문을 이해하면 기존 쿼리 에서 첫 번째, 두 번째, 세 번째 등이 반환되는 열에 영향을 미치고 싶 습니까?

모든 쿼리가 SELECT * FROM TABLE-로 작성된 경우 SQL에 배치 된대로 출력에 표시됩니다.

쿼리가 SELECT Field1, Field2 FROM TABLE-로 작성된 경우 SQL에서 배치되는 순서는 중요하지 않습니다.


Management Studio가이를 수행 할 때 임시 테이블을 생성하고 모든 것을 복사하고 원본 테이블을 삭제하고 임시 테이블의 이름을 변경합니다. 이에 상응하는 간단한 T-SQL 문은 없습니다.

그렇게하는 것을 좋아하지 않는다면 원하는 순서대로 열이있는 테이블보기를 만들고 사용할 수 있습니까?

편집 : 구타!


한 가지 방법이 있지만 쿼리 자체에만 일시적으로 적용됩니다. 예를 들면

5 개의 테이블이 있다고 가정 해 보겠습니다. 테이블 호출T_Testing

FirstName, LastName, PhoneNumber, Email 및 Member_ID

ID, 성, 이름, 전화, 이메일을 차례로 나열합니다.

선택에 따라 할 수 있습니다.

Select Member_ID, LastName, FirstName, PhoneNumber, Email
From T_Testing

Other than that, if you just want the LastName to Show before first name for some reason, you can do it also as follows:

Select LastName, *
From T_Testing

The only thing you wanna be sure that you do is that the OrderBy or Where Function needs to be denoted as Table.Column if you are going to be using a Where or OrderBy

Example:

Select LastName, *
From T_Testing
Order By T_Testing.LastName Desc

I hope this helps, I figured it out because I needed to do this myself.


  1. Script your existing table to a query window.
  2. Run this script against a Test database (remove the Use statement)
  3. Use SSMS to make the column changes you need
  4. Click Generate Change Script (left most and bottommost icon on the buttonbar, by default)
  5. Use this script against your real table

All the script really does is create a second table table with the desired column orders, copies all your data into it, drops the original table and then renames the secondary table to take its place. This does save you writing it yourself though should you want a deploy script.


It can be done using SQL, by modifying the system tables directly. For example, look here:

Alter table - Add new column in between

However, I would not recommend playing with system tables, unless it's absolutely necessary.


It is not possible to change the order of the columns without recreating the whole table. If you have a few instances of the database only, you can use SSMS for this (Select the table and click "design").

In case you have too many instances for a manual process, you should try this script: https://github.com/Epaminaidos/reorder-columns

참고URL : https://stackoverflow.com/questions/1610/can-i-logically-reorder-columns-in-a-table

반응형