Các SQL
truy vấn mà tôi đã sử dụng là:
ALTER TABLE oldtable RENAME TO newtable;
Nhưng, nó cho tôi một lỗi.
Máy chủ: Msg 156, Cấp 15, Trạng thái 1, Dòng 1
Cú pháp không chính xác gần từ khóa 'TO'.
Các SQL
truy vấn mà tôi đã sử dụng là:
ALTER TABLE oldtable RENAME TO newtable;
Nhưng, nó cho tôi một lỗi.
Máy chủ: Msg 156, Cấp 15, Trạng thái 1, Dòng 1
Cú pháp không chính xác gần từ khóa 'TO'.
Câu trả lời:
Để đổi tên bảng trong SQL Server, hãy sử dụng sp_rename
lệnh:
exec sp_rename 'schema.old_table_name', 'new_table_name'
'NewName'
trường, nếu không bảng của bạn có thể trông giống như vậy dbo.dbo.NewName
.
CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Để đổi tên một cột:
sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';
Để đổi tên bảng:
sp_rename 'old_table_name','new_table_name';
Khi sử dụng sp_rename hoạt động như trong các câu trả lời ở trên, hãy kiểm tra xem các đối tượng nào bị ảnh hưởng sau khi đổi tên, tham chiếu bảng đó, bởi vì bạn cũng cần thay đổi những đối tượng đó
Tôi lấy một ví dụ mã cho các phụ thuộc bảng tại blog của Pinal Dave tại đây
USE AdventureWorks
GO
SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
--,sed.* -- Uncomment for all the columns
FROM
sys.sql_expression_dependencies sed
INNER JOIN
sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
WHERE
referenced_entity_name = 'Customer'
Vì vậy, tất cả các đối tượng phụ thuộc này cũng cần được cập nhật
Hoặc sử dụng một số bổ trợ nếu bạn có thể, một số trong số chúng có tính năng đổi tên đối tượng và tất cả các đối tượng phụ thuộc, cũng vậy
Nếu bạn thử exec sp_rename
và nhận được lỗi LockMatchID thì trước tiên có thể giúp thêm câu lệnh sử dụng [cơ sở dữ liệu]:
Tôi đã thử
exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
-- Invalid EXECUTE statement using object "Object", method "LockMatchID".
Những gì tôi phải làm để sửa nó là viết lại thành:
use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';
Tên bảng
sp_rename 'db_name.old_table_name', 'new_table_name'
Cột
sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'
Mục lục
sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'
cũng có sẵn cho statics và datatypes
Đây là những gì tôi sử dụng:
EXEC sp_rename 'MyTable', 'MyTableNewName';
Không có gì làm việc từ đề xuất ở đây .. Vì vậy, chỉ cần đưa dữ liệu vào bảng mới
SELECT *
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];
có lẽ sẽ hữu ích cho ai đó ..
Trong trường hợp của tôi, nó không nhận ra lược đồ mới, dbo cũng là chủ sở hữu ..
CẬP NHẬT
EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';
Đã làm cho tôi. Tôi tìm thấy nó từ tập lệnh được tạo tự động khi cập nhật PK cho một trong các bảng. Bằng cách này, nó cũng nhận ra lược đồ mới ..
Để thay đổi tên bảng bằng một lược đồ khác:
Ví dụ: Thay đổi dbo.MyTable1 thành wrk.MyTable2
EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'
ALTER SCHEMA wrk TRANSFER dbo.MyTable2
.
trong đó, hãy sử dụng[]
xung quanh tên bảng. (Tôi biết, tôi biết, nhưng các dấu chấm có thể xảy ra ...) Ví dụsp_rename '[Stupid.name]', 'NewName'
hoặc với lược đồsp_rename '[dbo.Stupid.name]', 'NewName'