Tôi đang sử dụng SQL Server 2008 và Navicat. Tôi cần đổi tên một cột trong bảng bằng SQL.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Tuyên bố này không hoạt động.
Tôi đang sử dụng SQL Server 2008 và Navicat. Tôi cần đổi tên một cột trong bảng bằng SQL.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Tuyên bố này không hoạt động.
Câu trả lời:
Sử dụng sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
Xem: SQL SERVER - Cách đổi tên tên cột hoặc tên bảng
Tài liệu: sp_rename (Transact-SQL)
Đối với trường hợp của bạn, nó sẽ là:
EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
Hãy nhớ sử dụng dấu ngoặc đơn để đính kèm các giá trị của bạn.
EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
alter table
mà sẽ thất bại nếu những hạn chế như vậy tồn tại.
Ngoài ra SQL
, bạn có thể làm điều này trong Microsoft SQL Server Management Studio. Dưới đây là một vài cách nhanh chóng bằng GUI:
Nhấp đúp chuột 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.
Nhấp chuột phải vào cột và chọn Đổi tên từ menu ngữ cảnh.
Ví dụ:
Cách này thích hợp hơn khi bạn cần đổi tên nhiều cột trong một lần.
Ví dụ:
LƯU Ý: Tôi biết OP đặc biệt yêu cầu giải pháp SQL, nghĩ rằng điều này có thể giúp người khác :)
Bạn cũng nên chỉ định lược đồ của bảng hoặc bạn có thể gặp lỗi này:
Msg 15248, Cấp 11, Trạng thái 1, Quy trình sp_rename, Dòng 238 Hoặc tham số @objname không rõ ràng hoặc @objtype (COLUMN) được tuyên bố là sai.
Nếu nó là một kịch bản triển khai, tôi cũng khuyên bạn nên thêm một số bảo mật bổ sung cho nó.
IF EXISTS (
SELECT 1
FROM sys.columns
WHERE
name = 'OldColumnName' AND
object_name(object_id) = 'TableName'
) AND
NOT EXISTS (
SELECT 1
FROM sys.columns
WHERE
name = 'NewColumnName' AND
object_name(object_id) = 'TableName'
)
EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';
Nó sẽ là một gợi ý tốt để sử dụng một chức năng đã được tích hợp sẵn nhưng một cách khác là:
Lợi ích đằng sau việc sử dụng sp_rename
là nó chăm sóc tất cả các mối quan hệ liên quan đến nó.
Từ tài liệu :
sp_rename tự động đổi tên chỉ mục được liên kết bất cứ khi nào một ràng buộc CHÍNH hoặc UNIITE được đổi tên. Nếu một chỉ mục được đổi tên được gắn với một ràng buộc PRIMARY KEY, ràng buộc PRIMARY KEY cũng được tự động đổi tên bởi sp_rename. sp_rename có thể được sử dụng để đổi tên các chỉ mục XML chính và phụ.
Bạn có thể sử dụng sp_rename
để đổi tên một cột.
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
Tham số đầu tiên là đối tượng phải được sửa đổi, tham số thứ hai là tên mới sẽ được trao cho các đối tượng, và tham số thứ ba COLUMN thông báo cho máy chủ đó đổi tên là cho column
, và cũng có thể được sử dụng để đổi tên tables
, index
vàalias data type
.
Vì tôi thường đến đây và sau đó tự hỏi làm thế nào để sử dụng dấu ngoặc, câu trả lời này có thể hữu ích cho những người như tôi.
EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';
OldColumnName
không phải []
. Nó sẽ không làm việc.NewColumnName
vào []
, nó sẽ dẫn đến [[NewColumnName]]
.Xưởng quản lý máy chủ Sql có một số quy trình được lưu trữ do hệ thống lưu trữ (SP)
Một trong số đó được sử dụng để đổi tên một cột. SP là sp_rename
Cú pháp: sp_rename '[table_name] .old_column_name', 'new_column_name'
Để được trợ giúp thêm, hãy tham khảo bài viết này: sp_rename bởi Microsoft Docs
Lưu ý: Khi thực hiện SP này, máy chủ sql sẽ cung cấp cho bạn một thông báo thận trọng là ' Thận trọng: Thay đổi bất kỳ phần nào của tên đối tượng có thể phá vỡ các tập lệnh và thủ tục được lưu trữ '. Điều này chỉ quan trọng nếu bạn đã viết sp của riêng mình liên quan đến cột trong bảng bạn sắp thay đổi.
Phiên bản cải tiến của @Taher
DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @OldColumnName AS VARCHAR(128)
DECLARE @NewColumnName AS VARCHAR(128)
DECLARE @ParamValue AS VARCHAR(1000)
SET @SchemaName = 'dbo'
SET @TableName = 'tableName'
SET @OldColumnName = 'OldColumnName'
SET @NewColumnName = 'NewColumnName'
SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName
IF EXISTS
(
SELECT 1 FROM sys.columns WHERE name = @OldColumnName AND OBJECT_NAME(object_id) = @TableName
)
AND NOT EXISTS
(
SELECT 1 FROM sys.columns WHERE name = @NewColumnName AND OBJECT_NAME(object_id) = @TableName
)
BEGIN
EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END
Chạy truy vấn:
SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'