2008-10-06 40 views
87

Nếu tôi chỉ muốn đổi tên một cột (không thay đổi kiểu hoặc ràng buộc của nó, chỉ tên của nó) trong một cơ sở dữ liệu SQL bằng cách sử dụng SQL, làm cách nào để làm điều đó? Hay là điều này không thể thực hiện được?Làm cách nào để đổi tên một cột trong bảng cơ sở dữ liệu bằng SQL?

Điều này dành cho bất kỳ cơ sở dữ liệu nào tuyên bố hỗ trợ SQL, tôi chỉ tìm kiếm một truy vấn SQL cụ thể sẽ hoạt động bất kể việc triển khai cơ sở dữ liệu thực tế.

+1

Hệ thống cơ sở dữ liệu nào? – skaffman

+1

Thứ hai skaffman, đây không phải là một câu hỏi "SQL", đó là (có thể) một câu hỏi "SQLServer". –

+1

Bất kỳ hệ thống cơ sở dữ liệu nào nhằm mục đích sử dụng SQL. Oracle, MySQL, v.v ... Tôi đang tìm một câu trả lời độc lập về cơ sở dữ liệu. – MetroidFan2002

Trả lời

78

On PostgreSQL (và nhiều người khác RDBMS), bạn có thể làm điều đó với ALTER TABLE tuyên bố thường xuyên:

essais=> SELECT * FROM Test1; 
id | foo | bar 
----+-----+----- 
    2 | 1 | 2 

essais=> ALTER TABLE Test1 RENAME COLUMN foo TO baz; 
ALTER TABLE 

essais=> SELECT * FROM Test1; 
id | baz | bar 
----+-----+----- 
    2 | 1 | 2 
+8

Điều này không được hỗ trợ trong MySQL, phải không? – ustun

+3

Không, nó không được hỗ trợ trong MySQL – rick

+4

Điều này cũng không được hỗ trợ trong Microsoft SQL Server. Thay vào đó, hãy sử dụng 'sp_rename' theo câu trả lời của Galwegian: http://stackoverflow.com/a/174586/834431 – Chris

96

Cụ thể cho SQL Server, sử dụng sp_rename

USE AdventureWorks; 
GO 
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN'; 
GO 
+0

Có vẻ như Microsoft cụ thể và không có gì trong truy vấn ban đầu chỉ ra một DBMS của Microsoft. – bortzmeyer

+1

Có, câu trả lời tôi đang tìm kiếm là "chuẩn" SQL, và không phụ thuộc vào bất kỳ triển khai cụ thể nào. Tuy nhiên, đây là một câu trả lời hay cho bất kỳ ai sử dụng hệ thống của Microsoft. – MetroidFan2002

+0

Tôi đã chỉnh sửa câu trả lời để đưa điều này vào tài khoản –

3

ALTER TABLE là SQL tiêu chuẩn. Nhưng nó không hoàn toàn được triển khai trong nhiều hệ thống cơ sở dữ liệu.

+0

Tôi chấp nhận câu trả lời của bortz trên của bạn bởi vì ông đã đưa ra một lời giải thích chi tiết. Tuy nhiên, tôi đã upvoted bạn. – MetroidFan2002

+0

@ MetroidFan2002 - Tôi chỉ thêm câu trả lời của mình để thừa nhận rằng "ALTER TABLE" không chỉ là PostgreSQL, nó khá phổ biến. –

9

Trong Informix, bạn có thể sử dụng:

RENAME COLUMN TableName.OldName TO NewName; 

này được thực hiện trước khi các tiêu chuẩn SQL giải quyết vấn đề này - nếu nó được đề cập trong tiêu chuẩn SQL. Bản sao của tiêu chuẩn SQL 9075: 2003 không cho thấy nó là tiêu chuẩn (trong số những thứ khác, RENAME không phải là một trong những từ khóa). Tôi không biết liệu nó có thực sự là trong SQL 9075: 2008 hay không.

+2

Không có RENAME trong SQL 2008 Dự thảo nữa. –

+0

Không phải AS - sử dụng TO. 'ĐỔI TÊN COLUMN TableName.OldName ĐẾN NewName; ' http://www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/com.ibm.sqls.doc/ids_sqs_0939.htm – hitzi

+0

Cảm ơn - cố định ! –

2

Chuẩn sẽ là ALTER TABLE, nhưng điều đó không nhất thiết được hỗ trợ bởi mọi DBMS bạn có khả năng gặp phải, vì vậy nếu bạn đang tìm kiếm một cú pháp bao quát, bạn có thể không may mắn.

14

Thật không may, đối với giải pháp độc lập cơ sở dữ liệu, bạn sẽ cần phải biết mọi thứ về cột. Nếu nó được sử dụng trong các bảng khác dưới dạng khóa ngoài, chúng cũng sẽ cần được sửa đổi.

ALTER TABLE MyTable ADD MyNewColumn OLD_COLUMN_TYPE; 
UPDATE MyTable SET MyNewColumn = MyOldColumn; 
-- add all necessary triggers and constraints to the new column... 
-- update all foreign key usages to point to the new column... 
ALTER TABLE MyTable DROP COLUMN MyOldColumn; 

Đối với trường hợp rất đơn giản (không có ràng buộc, kích hoạt, chỉ mục hoặc khóa), nó sẽ thực hiện trên 3 dòng. Đối với bất cứ điều gì phức tạp hơn nó có thể nhận được rất lộn xộn như bạn điền vào các bộ phận còn thiếu.

Tuy nhiên, như đã đề cập ở trên, có các phương pháp cơ sở dữ liệu đơn giản hơn cụ thể nếu bạn biết bạn cần sửa đổi cơ sở dữ liệu nào trước thời hạn.

+0

Trực tiếp trả lời câu hỏi, ngay cả khi nó không chính xác những gì người hỏi đang tìm kiếm ... – Lambart

-1

Hoặc là SQL, bạn có thể thực hiện việc này trong Microsoft SQL Server Management Studio, từ bảng Design Panel.

Cách đầu tiên

Làm chậm nhấp đúp vào cột. Tên cột sẽ trở thành một hộp văn bản có thể chỉnh sửa.

Thứ hai Way

SqlManagement Studio >> cơ sở dữ liệu >> bảng >> specificTable >> Cột thư mục >> Kích chuột phải vào cột >> REMAN

Way Thứ ba

Bảng >> RightClick >> Thiết kế

25

Trong MySQL, cú pháp là ALTER TABLE ... CHANGE:

ALTER TABLE <table_name> CHANGE <column_name> <new_column_name> <data_type> ... 

Lưu ý rằng bạn không thể chỉ đổi tên và để nguyên loại và ràng buộc; bạn phải nhập lại kiểu dữ liệu và các ràng buộc sau tên mới của cột.

+0

nó được thử nghiệm trong cơ sở dữ liệu mySQL –

15

Tôi nghĩ đây là cách dễ nhất để thay đổi tên cột.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME' 
+0

điều này làm việc cho tôi trên SQL Server. Tôi không chắc chắn nếu điều này hoạt động trên DBMS khác – Nic

4

Trong sql server bạn có thể sử dụng

exec sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN' 

hoặc

sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN' 
1

Bạn có thể sử dụng lệnh sau để đổi tên các cột của bất kỳ bảng trong SQL Server:

exec sp_rename 'TableName.OldColumnName', 'New colunmName' 
Các vấn đề liên quan