Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đổi tên khóa chính trong SQL Server (T-SQL)

Trong SQL Server, bạn có thể sử dụng sp_rename thủ tục được lưu trữ để đổi tên đối tượng do người dùng tạo trong cơ sở dữ liệu hiện tại, bao gồm cả khóa chính.

Điều này có thể hữu ích nếu bạn có một khóa chính được gán tên tự động và bây giờ bạn muốn đặt cho nó một cái tên dễ đọc hơn.

Khi bạn tạo một khóa chính mà không cung cấp tên cho nó một cách rõ ràng, SQL Server sẽ tự động ủy quyền một tên cho nó. Những tên như vậy thường bao gồm một hậu tố số dài, điều này làm cho nó khó nhớ hơn. Nếu bạn cần tham chiếu đến khóa chính đó (ví dụ:trong mã, tài liệu của bạn, v.v.), những tên như vậy có thể khiến cuộc sống của bạn trở nên khó khăn hơn. May mắn thay, sp_rename cung cấp một cách nhanh chóng và dễ dàng để thay đổi tên này.

Cú pháp

Cú pháp cho sp_rename như sau:

sp_rename 
    [ @objname = ] 'object_name' ,
    [ @newname = ] 'new_name'
    [ , [ @objtype = ] 'object_type' ]

Đối với khóa chính (và các ràng buộc khác), loại đối tượng là OBJECT .

Ví dụ

Trước tiên, hãy lấy tên của khóa chính mà chúng ta muốn thay đổi:

SELECT 
    SCHEMA_NAME(schema_id) AS SchemaName, 
    name AS PrimaryKey
FROM sys.objects  
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))   
AND type = 'PK';

Kết quả:

 +--------------+--------------------------+
 | SchemaName   | PrimaryKey               |
 |--------------+--------------------------|
 | dbo          | PK__t1__3213663B10938530 |
 +--------------+--------------------------+ 

Đây là khóa chính cho bảng có tên t1 , Vì vậy, chúng tôi sẽ tiếp tục và đổi tên khóa chính đó.

Khi bạn đổi tên khóa chính, bạn cần đưa vào lược đồ với tên hiện tại.

Ví dụ:

EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1';

Khi bạn đổi tên khóa chính (hoặc bất kỳ đối tượng nào khác) trong SQL Server, bạn có thể sẽ thấy thông báo sau:

Caution: Changing any part of an object name could break scripts and stored procedures.

Về cơ bản, điều này cho chúng ta biết rằng bất kỳ tập lệnh và / hoặc thủ tục được lưu trữ nào tham chiếu đến đối tượng hiện có thể bị hỏng và cần được cập nhật cho phù hợp để phản ánh tên mới.

Bất kể, khóa chính hiện đã được đổi tên.

Chúng tôi có thể xác minh điều này bằng cách chạy lại truy vấn trước đó:

SELECT 
    SCHEMA_NAME(schema_id) AS SchemaName, 
    name AS PrimaryKey
FROM sys.objects  
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))   
AND type = 'PK';

Kết quả:

 +--------------+--------------+
 | SchemaName   | PrimaryKey   |
 |--------------+--------------|
 | dbo          | PK_t1        |
 +--------------+--------------+ 

Bao gồm loại đối tượng

Bạn cũng có thể bao gồm kiểu đối tượng làm đối số thứ ba. Đối với khóa chính và các ràng buộc khác, hãy sử dụng OBJECT :

EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1', 'OBJECT';

Bao gồm Tên tham số

Như với bất kỳ thủ tục được lưu trữ nào, bạn cũng có thể bao gồm tên tham số khi gọi sp_rename :

EXEC sp_rename 
    @objname = 'dbo.PK__t1__3213663B10938530',
    @newname = 'PK_t1',
    @objtype = 'OBJECT';

Điều này thực hiện chính xác cùng một điều (đổi tên khóa chính được chỉ định).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo sử dụng SQL Server với Salesforce

  2. Làm cách nào để tạo bảng bằng cách sử dụng truy vấn chọn trong SQL Server?

  3. Bản phát hành mới:Gói điều chỉnh Spotlight 7.1.9

  4. cách hiệu quả để triển khai phân trang

  5. Cách tốt nhất để lưu trữ thời gian (hh:mm) trong cơ sở dữ liệu