문제

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

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

SQL Management Studio를 통해 테이블의 "디자인" 모드로 이동하여 열 순서를 끌어서 이 작업을 수행할 수 있다는 것을 알고 있지만, 순서를 수행할 수 있도록 원시 SQL에서 이 작업을 수행하고 싶습니다. 명령줄에서 스크립트를 작성했습니다.

도움이 되었습니까?

해결책

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

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

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

다른 팁

내 생각에 여기 있는 모든 사람들이 놓치고 있는 점은 모든 사람이 국가와 전 세계에 설치된 동일한 소프트웨어 시스템의 10, 20, 1000개 인스턴스를 처리해야 하는 것은 아니라는 것입니다.상업적으로 판매되는 소프트웨어를 설계하는 사람들도 그렇게 합니다.결과적으로 우리는 시간이 지남에 따라 시스템을 확장하고, 새로운 기능이 필요할 때 필드를 추가하여 테이블을 확장하며, 해당 필드가 식별되면 기존 테이블에 속하므로 10년 동안 필드를 확장, 성장, 추가하는 등의 과정을 거쳤습니다. 테이블로 ....그런 다음 설계부터 지원, 때로는 원시 데이터 분석/문제 해결에 이르기까지 해당 테이블을 사용하여 새로운 기능 버그를 디버깅해야 합니다.30-40-50 또는 심지어 90개의 필드가 있는 테이블이 있고 엄격하게 정규화된 데이터베이스에 예가 있는 경우 처음 몇 개의 필드 내에 보고 싶은 기본 정보가 없다는 것은 엄청나게 문제입니다.

나는 종종 이런 정확한 이유 때문에 이것을 할 수 있기를 바랐습니다.그러나 SQL이 수행하는 작업을 정확하게 수행하는 것, 원하는 방식으로 새 테이블에 대한 생성 스크립트 작성, 삽입을 작성한 다음 기존 테이블에서 모든 기존 제약 조건, 관계, 키, 인덱스 등을 삭제하고 이름을 바꾸는 것에는 부족합니다. "새" 테이블을 이전 이름으로 되돌린 다음 해당 키, 관계, 인덱스 등을 모두 읽습니다.

지루하고 시간이 많이 걸릴 뿐만 아니라...5년 뒤에는 이런 일이 다시 일어나야 할 것이다....

그 엄청난 양의 작업 가치에 매우 가깝지만 요점은 ...우리의 시스템은 계속해서 성장하고 확장하며 필요/설계 추가에 따라 잘못된 주문을 받을 것이기 때문에 이 기능이 필요한 것은 이번이 마지막이 아닐 것입니다.

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

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

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

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

귀하의 쿼리가 다음과 같이 작성된 경우 SELECT Field1, Field2 FROM TABLE - 그러면 SQL에서 배치되는 순서는 중요하지 않습니다.

Management Studio에서는 임시 테이블을 생성하고, 모든 것을 복사하고, 원본 테이블을 삭제하고, 임시 테이블의 이름을 바꿉니다.간단하고 동등한 T-SQL 문은 없습니다.

그렇게 하고 싶지 않다면 언제든지 원하는 순서대로 열이 포함된 테이블 뷰를 만들어 사용할 수 있습니까?

편집하다:밟아 다진!

한 가지 방법이 있지만 쿼리 자체에 대해서는 일시적일 뿐입니다.예를 들어,

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

이름, 성, 전화번호, 이메일 및 Member_ID

ID, 성, 이름, 전화번호, 이메일을 나열하고 싶습니다.

Select에 따라 수행할 수 있습니다.

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

그 외에 어떤 이유로 성(LastName)을 이름 앞에 표시하려면 다음과 같이 할 수도 있습니다.

Select LastName, *
From T_Testing

유일하게 확인하고 싶은 것은 Where 또는 OrderBy를 사용하려는 경우 OrderBy 또는 Where 함수를 Table.Column으로 표시해야 한다는 것입니다.

예:

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

이것이 도움이 되기를 바랍니다. 이 작업은 제가 직접 해야 했기 때문에 알아냈습니다.

  1. 기존 테이블을 쿼리 창에 스크립팅합니다.
  2. 테스트 데이터베이스에 대해 이 스크립트를 실행합니다(Use 문 제거).
  3. SSMS를 사용하여 필요한 열 변경
  4. 변경 스크립트 생성을 클릭하십시오 (기본적으로 버튼 바에서 가장 많이 왼쪽 및 병적 인 아이콘)
  5. 실제 테이블에 대해 이 스크립트를 사용하세요.

스크립트가 실제로 수행하는 작업은 원하는 열 순서로 두 번째 테이블 테이블을 생성하고, 모든 데이터를 여기에 복사하고, 원래 테이블을 삭제한 다음, 그 자리를 대신할 보조 테이블의 이름을 바꾸는 것입니다.배포 스크립트를 원할 경우 직접 작성하는 시간을 절약할 수 있습니다.

SQL을 사용하여 시스템 테이블을 직접 수정하여 수행할 수 있습니다.예를 들어, 여기를 보세요:

테이블 변경 - 사이에 새 열을 추가합니다.

그러나 꼭 필요한 경우가 아니면 시스템 테이블을 가지고 플레이하는 것을 권장하지 않습니다.

전체 테이블을 다시 생성하지 않고는 열의 순서를 변경할 수 없습니다.데이터베이스 인스턴스가 몇 개만 있는 경우 이를 위해 SSMS를 사용할 수 있습니다(테이블을 선택하고 "디자인"을 클릭).

수동 프로세스에 인스턴스가 너무 많은 경우 다음 스크립트를 시도해야 합니다.https://github.com/Epaminaidos/reorder-columns

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top