2011-01-19 71 views

Trả lời

18

ALTER sẽ không làm điều đó bởi vì cột để không quan trọng để lưu trữ hoặc truy vấn

Nếu SQL Server, bạn phải sử dụng thiết kế SSMS Bảng để sắp xếp các cột của bạn, sau đó có thể tạo ra một kịch bản mà giọt và tái tạo lại bàn

Sửa Jun 2013

liên kết chéo vào câu trả lời của tôi ở đây: Performance/Space implications when ordering SQL Server columns?

+7

Thứ tự cột ** không quan trọng ** khi xử lý việc chèn hàng loạt. –

+3

Chỉ khi bạn không sử dụng, hãy đọc tệp định dạng – gbn

+0

Cảm ơn bạn. Tiết kiệm cho tôi lãng phí thời gian hơn cố gắng tìm ra cách làm cho sản phẩm MS SQL làm điều này. – noogrub

21

MySQL:

ALTER TABLE mytable 
ADD COLUMN new_column <type> 
AFTER  existing_column 

MSSQL (AFAIK) không cho phép bạn thay đổi bảng và thêm một cột sau một cột cụ thể. Đặt cược tốt nhất của bạn là sử dụng Sql Server Management Studio hoặc chơi xung quanh bằng cách thả và thêm lại bảng hoặc tạo bảng mới và di chuyển dữ liệu theo cách thủ công. không phải là rất duyên dáng.

6

Có thể.

Đầu tiên, chỉ cần thêm từng cột theo cách thông thường (làm cột cuối cùng).

Thứ hai, trong SQL Server Management Studio Truy cập Công cụ => Tùy chọn.

Trong tab 'Nhà thiết kế' => 'Trình đơn bảng và trình thiết kế cơ sở dữ liệu', bỏ chọn tùy chọn 'Ngăn lưu thay đổi yêu cầu tạo lại bảng'.

Sau đó, nhấp chuột phải vào bảng của bạn và chọn 'Thiết kế'. Trong chế độ 'Thiết kế', chỉ cần kéo các cột để sắp xếp chúng.

Đừng quên lưu.

+8

OP yêu cầu truy vấn SQL để làm điều đó. Đề xuất của bạn đang sử dụng Management Studio. – AaA

+1

+1 Điều này đã giúp tôi thực hiện nó bằng cách tắt "Ngăn chặn lưu" tùy chọn.Vì vậy, không cần truy vấn (mà không phải là có thể anyway). – kajaco

1

Đầu tiên thêm cột mới vào bảng cũ thông qua SSMStudio. Chuyển đến cơ sở dữ liệu >> bảng >> cột. Nhấp chuột phải vào các cột và chọn cột mới. Làm theo hướng dẫn. Sau đó, tạo bảng mới với các cột được sắp xếp theo ý muốn như sau:

select * into my_new_table from (
select old_col1, my_new_col, old_col2, old_col3 
from my_old_table 
) as A 
; 

Sau đó đổi tên các bảng như mong muốn thông qua SSMStudio. Chuyển đến cơ sở dữ liệu >> bảng >> chọn đổi tên.

0

Bạn nên chọn * từ mọi thứ, dấu chấm. Đây là lý do tại sao SSMS thêm mọi tên trường, ngay cả khi có hàng trăm trường, thay vì chọn *. Nó là cực kỳ không hiệu quả bất kể bảng lớn như thế nào. Nếu bạn không biết các trường là gì, nó vẫn còn hiệu quả hơn để kéo chúng ra khỏi cơ sở dữ liệu INFORMATION_SCHEMA hơn là chọn *.

Một truy vấn tốt hơn sẽ là:

SELECT 
COLUMN_NAME, 
Case 
    When DATA_TYPE In ('varchar', 'char', 'nchar', 'nvarchar', 'binary') 
    Then convert(varchar(MAX), CHARACTER_MAXIMUM_LENGTH) 
    When DATA_TYPE In ('numeric', 'int', 'smallint', 'bigint', 'tinyint') 
    Then convert(varchar(MAX), NUMERIC_PRECISION) 
    When DATA_TYPE = 'bit' 
    Then convert(varchar(MAX), 1) 
    When DATA_TYPE IN ('decimal', 'float') 
    Then convert(varchar(MAX), Concat(Concat(NUMERIC_PRECISION, ', '), NUMERIC_SCALE)) 
    When DATA_TYPE IN ('date', 'datetime', 'smalldatetime', 'time', 'timestamp') 
    Then '' 
End As DATALEN, 
DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
Where 
TABLE_NAME = '' 
Các vấn đề liên quan