developer tip

SQL Server 2005에서 SQL 쿼리를 사용하여 테이블의 열 순서를 변경하는 방법은 무엇입니까?

copycodes 2020. 8. 30. 08:51
반응형

SQL Server 2005에서 SQL 쿼리를 사용하여 테이블의 열 순서를 변경하는 방법은 무엇입니까?


SQL Server 2005에서 SQL 쿼리를 사용하여 테이블의 열 순서를 변경하는 방법은 무엇입니까?

SQL 쿼리를 사용하여 테이블의 열 순서를 재정렬하고 싶습니다.


당신은 할 수 없습니다. 열 순서는 우리 인간이 신경 쓰는 "외관 적"일뿐입니다. SQL Server에 대해서는 거의 항상 절대적으로 관련이 없습니다.

열 순서를 변경할 때 SQL Server Management Studio가 백그라운드에서 수행하는 작업은 새 CREATE TABLE명령으로 테이블을 처음부터 다시 만들고 이전 테이블의 데이터를 복사 한 다음 삭제하는 것입니다.

열 순서를 정의하는 SQL 명령이 없습니다.


'기본'순서에 *를 사용하는 대신 반환 할 순서대로 필드를 명시 적으로 나열해야합니다.

원래 검색어 :

select * from foobar

보고

foo bar
--- ---
  1   2

지금 쓰다

select bar, foo from foobar

bar foo
--- ---
  2   1

http://msdn.microsoft.com/en-us/library/aa337556.aspx

이 작업은 Transact-SQL 문을 사용하여 수행 할 수 없습니다.

글쎄, 그것은 komma8.komma1의 답변대로 create/ 복사 / drop/ 이름 바꾸기를 사용할 수 있습니다.

또는 SQL Server Management Studio를 사용할 수 있습니다.

  1. 에서 개체 탐색기 , 당신이 순서를 원하는 열이있는 테이블을 마우스 오른쪽 단추로 클릭 디자인 (이전 버전에 수정을. 2005 SP1 또는)
  2. 재정렬 할 열 이름 왼쪽에있는 상자를 선택합니다. (키보드에서 [shift] 또는 [ctrl] 키를 눌러 여러 열을 선택할 수 있습니다.)
  3. 열을 테이블 내의 다른 위치로 끕니다.

그런 다음 저장을 클릭하십시오. 이 방법은 실제로 테이블을 삭제하고 다시 생성하므로 일부 오류가 발생할 수 있습니다.

경우 변경 내용 추적 옵션은 데이터베이스와 테이블을 사용,이 방법을 사용하면 안됩니다.

비활성화 된 경우 도구 메뉴> 옵션> 디자이너에서 테이블 다시 생성이 필요한 변경 사항 저장 방지 옵션을 지워야합니다. 그렇지 않으면 "변경 사항 저장이 허용되지 않음" 오류가 발생합니다.

  • 사용 불가능하게 테이블을 다시 생성이 필요 방지 변경 사항을 저장 이 테이블이 다시 생성 될 때 정보의 존재가 삭제 추적 기존의 변화를 리드 당신이해야하므로, 옵션이 강하게 마이크로 소프트에 대해 권장을 변경 내용 추적 경우이 옵션을 사용하지 않을 활성화되었습니다!

기본 및 외래 키 생성 중에 문제가 발생할 수도 있습니다.

위의 오류가 발생하면 저장에 실패하여 원래 열 순서가 유지됩니다.


이것은 질의의 결과로 레코드를 정렬하는 질문과 유사하며 일반적으로 공식적으로 정답을 좋아하는 사람은 없습니다 ;-)

그래서 여기에 간다 :

  • SQL 표준에 따라 테이블의 열은 "순서"가 아닙니다.
  • 결과적으로 a select *는 열이 특정 순서로 반환되도록 강제하지 않습니다.
  • 일반적으로 각 RDBMS에는 일종의 "기본"순서 (일반적으로 열이 테이블에 추가 된 순서, create table' or in thealter table add`문 중 하나)가 있습니다.
  • 따라서 열 순서에 의존하는 경우 (쿼리 결과를 사용하여 열 위치에서 다른 데이터 구조를 채우는 경우) 원하는 순서대로 열을 명시 적으로 나열하십시오.

물론 SQL 문에서 열 순서를 변경할 수 있습니다. 그러나 테이블의 물리적 열 순서를 추상화하려면 뷰를 만들 수 있습니다.

CREATE TABLE myTable(
    a int NULL,
    b varchar(50) NULL,
    c datetime NULL
);


CREATE VIEW vw_myTable
AS
SELECT c, a, b
  FROM myTable;

select * from myTable;
a  b  c
-  -  -

select * from vw_myTable
c  a  b
-  -  -

SQLServer Management Studio에서 :

도구-> 옵션-> 디자이너-> 테이블 및 데이터베이스 디자이너

  • '테이블 다시 생성이 필요한 변경 사항 저장 방지'를 선택 취소합니다.

그때:

  • 열 순서를 변경할 테이블을 마우스 오른쪽 버튼으로 클릭합니다.
  • '디자인'을 클릭합니다.
  • 열을 원하는 순서로 끕니다.
  • 마지막으로 저장을 클릭합니다.

SQLServer Management Studio는 테이블을 삭제하고 데이터를 사용하여 다시 만듭니다.


새 테이블을 만들고 모든 데이터를 복사하고 이전 테이블을 삭제 한 다음 새 테이블의 이름을 변경하여 이전 테이블을 대체하면됩니다.

You could also add new columns to the table, copy the column by column data over, drop the old columns, then rename new columns to match the old ones. A simple example below: http://sqlfiddle.com/#!3/67af4/1

CREATE TABLE TestTable (
    Column1 INT,
    Column2 VARCHAR(255)
);
GO

insert into TestTable values(1, 'Test1');
insert into TestTable values(2, 'Test2');
GO

select * from TestTable;
GO

ALTER TABLE TestTable ADD Column2_NEW VARCHAR(255);
ALTER TABLE TestTable ADD Column1_NEW INT;
GO

update TestTable 
set Column1_NEW = Column1, 
    Column2_NEW = Column2;
GO

ALTER TABLE TestTable DROP COLUMN Column1;
ALTER TABLE TestTable DROP COLUMN Column2;
GO

sp_rename 'TestTable.Column1_NEW', 'Column1', 'COLUMN';
GO
sp_rename 'TestTable.Column2_NEW', 'Column2', 'COLUMN';
GO

select * from TestTable;
GO

In SQLServer Management Studio:

Tools -> Options -> Designers -> Table and Database Designers

Unselect 'Prevent saving changes that require table re-creation'.

Now you can reorder the table.


If your table has enough columns then you can try this. First create a new table with preferred order of columns.

    create table new as select column1,column2,column3,....columnN from table_name;

Now drop the table using drop command

    drop table table_name;

now rename the newly created table to your old table name.

    rename new to table_name;

now select the table, you have your columns rearranged as you preferred before.

    select * from table_name;

Sql server internally build the script. It create a temporary table with new changes and copy the data and drop current table then recreate the table insert from temp table. I find it from "Generate Change script" option ssms 2014. Script like this. From Here: How to change column order in a table using sql query

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_emps
    (
    id int NULL,
    ename varchar(20) NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_emps SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.emps)
     EXEC('INSERT INTO dbo.Tmp_emps (id, ename)
        SELECT id, ename FROM dbo.emps WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.emps
GO
EXECUTE sp_rename N'dbo.Tmp_emps', N'emps', 'OBJECT' 
GO
COMMIT

At the end of the day, you simply cannot do this in MS SQL. I recently created tables on the go (application startup) using a stored Procedure that reads from a lookup table. When I created a view that combined these with another table I had manually created earlier one (same schema, with data), It failed - simply because I was using ''Select * UNION Select * ' for the view. At the same time, if I use only those created through the stored procedure, I am successful.

In conclusion: If there is any application which depends on the order of column it is really not good programming and will for sure create problems in the future. Columns should 'feel' free to be anywhere and be used for any data process (INSERT, UPDATE, SELECT).


You can change this using SQL query. Here is sql query to change the sequence of column.

ALTER TABLE table name 
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;

You can achieve it with these steps:

  1. remove all foreign keys and primary key of the original table.

  2. rename the original table.

  3. using CTAS create the original table in the order you want.

  4. drop the old table.

  5. apply all constraints back to the original table


If the columns to be reordered have recently been created and are empty, then the columns can be deleted and re-added in the correct order.

This happened to me, extending a database manually to add new functionality, and I had missed a column out, and when I added it, the sequence was incorrect.

After finding no adequate solution here I simply corrected the table using the following kind of commands.

ALTER TABLE  tablename  DROP COLUMN  columnname; 
ALTER TABLE  tablename  ADD columnname columntype;

Note: only do this if you don't have data in the columns you are dropping.

People have said that column order does not matter. I regularly use SQL Server Management Studio "generate scripts" to create a text version of a database's schema. To effectively version control these scripts (git) and to compare them (WinMerge), it is imperative that the output from compatible databases is the same, and the differences highlighted are genuine database differences.

Column order does matter; but just to some people, not to everyone!


In order to have a specific column order You need to select column by column in the order You wish. Selection order dictates how columns will be ordered in output.


Try this command:

alter table students modify age int(5) first; 

This will change the position of age to the first position.


Use

SELECT * FROM TABLE1

which displays the default column order of the table.

If you want to change the order of the columns.

Specify the column name to display correspondingly

SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1

you can use indexing.. After indexing, if select * from XXXX results should be as per the index, But only result set.. not structrue of Table


alter table name modify columnname int(5) first; will bring the column to first alter table name modify columnname int(5) after (tablename);


Example: Change position of field_priority after field_price in table status.

ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;

참고URL : https://stackoverflow.com/questions/1605144/how-to-change-column-order-in-a-table-using-sql-query-in-sql-server-2005

반응형