Thêm một Cột mới và xác định vị trí của nó trong một bảng


7

Tôi có Bảng A với 5 cột:

TableA
--
Name
Tel
Email
Address

Tôi muốn thêm một cột mới (di động) ở giữa Tel & Email:

TableA
--
Name
Tel
Mobile
Email
Address

Nếu tôi sử dụng

ALTER TABLE TableA
ADD COLUMN Mobile INT NOT NULL

cột di động được thêm vào cuối bảng.

Có cách nào để đạt được điều này mà không làm rơi bảng và di chuyển dữ liệu sang một bảng mới không?


5
Thứ tự của các cột trong bảng quan hệ không quan trọng. Tại sao bạn nghĩ rằng bạn cần phải có một vị trí cụ thể cho cột đó? Bạn luôn có thể nhận được thứ tự cột bạn cần bằng cách chỉ định thứ tự đó trong danh sách các cột cho câu lệnh chọn
a_horse_with_no_name

2
Đúng, tôi chỉ muốn bảng trông có cấu trúc và có tổ chức, ý tôi là tôi muốn các cột liên quan ở gần nhau, giống như firstname,lastnametôi không muốn tên ở đầu và cuối ở cuối.
AmmarR

2
@AmmarR - FWIW Tôi đồng ý với bạn và nhận xét của Erland về mục kết nối được liên kết. Sẽ tốt hơn nhiều khi có các cột liên quan với nhau khi xem bảng trong trình thiết kế hơn là phải nhảy xung quanh định nghĩa bảng.
Martin Smith

Tại sao chúng ta không thể chèn một cột mới giữa các cột hiện tại của một bảng: connectsql.blogspot.com/2010/12/...
aasim.abdullah

Câu trả lời:


17

Không. Xây dựng lại bảng là cách duy nhất. Xem mục Kết nối này để xác nhận .

Bạn có thể sử dụng SSMS để tạo kịch bản này cho bạn nếu bạn tin tưởng người thiết kế bảng có chút lỗi.

Ngoài ra, bạn có thể khai báo một khung nhìn với thứ tự cột mong muốn như một cách để nhóm các cột có liên quan logic với nhau.


Sự thật đáng buồn vì bảng này rất lớn, 30 triệu hồ sơ và được sử dụng rất nhiều. Tôi hơi ngạc nhiên về điều này. Ý tôi là trong Sql 2000 tôi đã có thể sử dụng Trình thiết kế bảng để thêm một cột ở giữa các cột và trình thiết kế cho phép lưu các thay đổi, nhưng trong sql 2008, tôi luôn nhận được thông báo Saving changes is not permitted, the changes you have made require the table to be dropped and re-createdtheo cách tôi sử dụng tập lệnh làm điều đó, tôi không biết điều gì đã khiến Microsoft thay đổi suy nghĩ về tính năng này.
AmmarR

9
@AmmarR - Điều mới duy nhất là bây giờ bạn nhận được một thông báo cảnh báo, trước khi nó vừa rơi xuống và tái tạo lại cái bàn lặng lẽ phía sau hậu trường. 2000 cũng không có cú pháp để làm điều này. Bạn có thể vô hiệu hóa tùy chọn để ngăn lưu các thay đổi sẽ giảm và tạo lại bảng nhưng tôi chắc chắn sẽ không bận tâm trong trường hợp bạn mô tả ở trên trừ khi bạn có thể thực hiện trong cửa sổ bảo trì. Bạn cũng nên lưu ý rằng người thiết kế có một số lỗi (ví dụ như mất các FILESTREAMcột trên khi nó tạo lại bảng), vì vậy chỉ cần sử dụng nó để kịch bản thay đổi sau đó kiểm tra nó.
Martin Smith

-8

Nếu bạn thấy "Lưu thay đổi không được phép." thông báo sau khi thêm một cột mới trong Trình thiết kế với SQL Server 2005 trở lên, bạn sẽ cần chọn Công cụ -> Tùy chọn, chọn Nhà thiết kế và bỏ chọn hộp bên dưới Tùy chọn bảng có tên: "Ngăn chặn lưu thay đổi yêu cầu tạo lại bảng." Sau khi bạn thực hiện bước này, bạn sẽ có thể lưu các thay đổi của mình vào nơi bạn muốn.

Thật kỳ lạ khi MySQL cho phép bạn thêm các cột ở bất cứ đâu bằng SQL, nhưng với SQL Server, bạn chỉ có thể thực hiện việc này bằng Trình thiết kế. Hừm. Có vẻ như phải có một số lệnh ma thuật ẩn ở đâu đó! ;-)


1
Điều này vẫn sẽ thả bảng.
ypercubeᵀᴹ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.