Thêm một cột vào bảng hiện có và đánh số duy nhất chúng trên MS SQL Server


121

Tôi muốn thêm một cột vào cơ sở dữ liệu kế thừa hiện có và viết một thủ tục mà tôi có thể gán cho mỗi bản ghi một giá trị khác nhau. Một cái gì đó như thêm một cột và tự động tạo dữ liệu cho nó.

Giống như, nếu tôi thêm một cột mới có tên "ID" (số), tôi muốn sau đó khởi tạo một giá trị duy nhất cho mỗi bản ghi. Vì vậy, cột ID của tôi sẽ có các bản ghi từ say 1 to 1000.
Làm thế nào để làm điều đó?


2
Đây sẽ là cơ sở dữ liệu cụ thể. Bạn nên chỉ định cơ sở dữ liệu bạn đang làm việc.
dvorak 20-08

1
Bạn nên chỉnh sửa câu hỏi của mình để đề cập đến điều đó.
dvorak 20/09/08

Câu trả lời:


221

Điều này sẽ phụ thuộc vào cơ sở dữ liệu nhưng đối với SQL Server, điều này có thể đạt được như sau:

alter table Example
add NewColumn int identity(1,1)

5
Điều đó hoạt động tuyệt vời và tự động thêm tất cả các số tôi cần. Cảm ơn!
djangofan

9
Nếu bạn gặp sự cố khi thực hiện thay đổi với phòng thu quản lý, bạn có thể thay đổi cài đặt trong / Tools / Options / Designer / Table and Database Desiger, bạn sẽ thấy một hộp kiểm Prevent saving changes that require table re-creationbỏ chọn hộp đó và bạn sẽ có thể thêm cột nhận dạng ngay cả bằng cách sử dụng gui.
lướt ván

22

Sẽ hữu ích nếu bạn đăng cơ sở dữ liệu SQL nào bạn đang sử dụng. Đối với MySQL, bạn có thể muốn auto_increment:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

Tuy nhiên, không chắc liệu điều này có áp dụng các giá trị trở về trước hay không. Nếu không, bạn chỉ có thể lặp lại các giá trị của mình bằng một thủ tục được lưu trữ hoặc trong một chương trình đơn giản (miễn là không có ai khác đang ghi vào cơ sở dữ liệu) và sử dụng LAST_INSERT_ID()hàm để tạo giá trị id.


7
Tôi cũng có thể xác nhận rằng điều này thực sự hoạt động cho MySQL; Tôi vừa thêm trường id tăng dần vào bảng chưa lập chỉ mục hiện có và mỗi hàng có một id mới duy nhất.
Doug Kavendek

Xin lỗi nó là một cái cũ nhưng nó đã nói máy chủ SQL trong tiêu đề.
Nick

11

đối với oracle bạn có thể làm điều gì đó như dưới đây

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

8

Và tương đương với Postgres (dòng thứ hai chỉ bắt buộc nếu bạn muốn "id" là một khóa):

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);


3

cho kiểu dữ liệu UNIQUEIDENTIFIER trong máy chủ sql, hãy thử cái này

Alter table table_name
add ID UNIQUEIDENTIFIER not null unique default(newid())

Nếu bạn muốn tạo khóa chính từ cột đó, hãy sử dụng

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);

0

Phụ thuộc vào cơ sở dữ liệu vì mỗi cơ sở dữ liệu có một cách khác nhau để thêm số thứ tự. Tôi sẽ thay đổi bảng để thêm cột sau đó viết một tập lệnh db trong groovy / python / etc để đọc trong dữ liệu và cập nhật id bằng một chuỗi. Khi dữ liệu đã được thiết lập, tôi sẽ thêm một chuỗi vào bảng bắt đầu sau số trên cùng. Khi dữ liệu đã được thiết lập, hãy đặt các khóa chính một cách chính xác.


0

Nếu bạn không muốn cột mới của mình thuộc loại IDENTITY(tự động tăng) hoặc bạn muốn cụ thể về thứ tự mà các hàng của bạn được đánh số, bạn có thể thêm một cột thuộc loại INT NULLvà sau đó điền nó như thế này. Trong ví dụ của tôi, cột mới được gọi là MyNewColumn và cột khóa chính hiện có cho bảng được gọi là MyPrimaryKey.

UPDATE MyTable
SET MyTable.MyNewColumn = AutoTable.AutoNum
FROM
(
    SELECT MyPrimaryKey, 
    ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum
    FROM MyTable 
) AutoTable
WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey  

Điều này hoạt động trong SQL Sever 2005 trở lên, tức là các phiên bản hỗ trợ ROW_NUMBER()

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.