Cách tốt nhất để đổi tên các bảng sau khi hoàn thành phát triển


8

Cách tiếp cận dễ dàng và đáng tin cậy nhất để đổi tên các bảng và cột cơ sở dữ liệu trong SQL Server 2008 r2 là gì? Chúng tôi đã hoàn thành phát triển và vì một số lý do, chúng tôi được yêu cầu đổi tên một số bảng và cột mới.

Là sử dụng từ đồng nghĩa là cách tốt để làm điều đó? Những cạm bẫy chúng ta nên chuẩn bị là gì? Nó có giúp đổi tên các cột một cách duyên dáng không?

Chúng tôi có rất nhiều tập lệnh liên quan đến các bảng này và chúng cũng được các nhà phát triển .net tham chiếu trong ứng dụng.


Có phải ý định đổi tên các đối tượng cơ sở dữ liệu này và cung cấp một mặt tiền để các ứng dụng hiện tại không cần phải sửa đổi để sử dụng tên đối tượng mới?
billinkc

Câu trả lời:


10

Tôi nghĩ rằng cách tiếp cận phụ thuộc vào việc (các) ứng dụng đang hoạt động hay nếu bạn vẫn đang thử nghiệm.

Đối với các bảng, cách tiếp cận an toàn nhất là tạo một từ đồng nghĩa bằng cách sử dụng tên mới. Bằng cách này, bạn có thể thay đổi (các) ứng dụng cùng một lúc (hoặc thậm chí một tham chiếu tại một thời điểm) mà không phải thay đổi tất cả chúng cùng một lúc. Bạn không phải bỏ từ đồng nghĩa và đổi tên bảng cho đến khi bạn tự tin rằng bạn có tất cả các thay đổi tại chỗ.

CREATE SYNONYM dbo.NewName FOR dbo.OldName;
-- change app to point to dbo.NewName;

-- once all of your changes have been tested:
BEGIN TRANSACTION;
  DROP SYNONYM dbo.NewName;
  EXEC sp_rename N'dbo.OldName', N'NewName', N'OBJECT';
COMMIT TRANSACTION;

Đối với các cột, nó là một chút phức tạp hơn. Thay vào đó, bạn có thể tạo các từ đồng nghĩa trỏ đến một khung nhìn, nhưng không phải tất cả các khung nhìn đều có thể cập nhật tùy thuộc vào bảng cơ sở. Một ví dụ đơn giản:

CREATE VIEW dbo.vNewName 
AS 
  SELECT Column1, NewColumnName = OldColumnName
    FROM dbo.OldName;

CREATE SYNONYM dbo.NewName FOR dbo.vNewName;

Sau đó, giống như trên, khi bạn đã thay đổi tất cả các tham chiếu đến các cột và tên bảng mới, chỉ cần:

BEGIN TRANSACTION;
  DROP SYNONYM dbo.NewName;
  DROP VIEW dbo.vNewName;
  EXEC sp_rename N'dbo.OldName', N'NewName', N'OBJECT';
  EXEC sp_rename N'dbo.NewName.OldColumnName', N'NewColumnName', N'COLUMN';
COMMIT TRANSACTION;

Nếu ứng dụng không hoạt động và vẫn đang trong quá trình thử nghiệm, chỉ cần đổi tên các cột và sửa lỗi bị hỏng sau khi tìm kiếm toàn cầu và thay thế (hoặc bộ tái cấu trúc thông minh sử dụng SSDT, RedGate, v.v.) thông qua mã / quy trình ứng dụng, v.v.

Nếu ứng dụng đang hoạt động, bạn sẽ cần phải cẩn thận hơn một chút.


+1 để xác thực thay đổi và sửa chữa cách tiếp cận đã bị
hỏng

Cảm ơn câu trả lời tốt của bạn, nhưng bạn có thể tư vấn cho tôi ý của bạn không: "Bằng cách này, bạn có thể thay đổi (các) ứng dụng một lần (hoặc thậm chí một tham chiếu tại một thời điểm), mà không phải thay đổi tất cả chúng cùng một lúc. ". Bạn có nghĩa là chúng ta nên tạo một từ đồng nghĩa tại thời điểm ví dụ bảng đầu tiên t1, thay đổi mã, sau đó bảng t2, v.v.?
Bầu trời

Bây giờ chúng ta đang ở giai đoạn phát triển, nhưng hệ thống gần như đã được hoàn thành cho thành phần mà các bảng này sẽ được đổi tên. Hệ thống hiện được triển khai lên UAT.
Bầu trời

1
@Nazila không, ý tôi là bạn có thể tạo một từ đồng nghĩa cho bảng1 (và một cho bảng2, bảng3, v.v.). Sau đó, bạn có thể thay đổi một ứng dụng, hoặc một lớp hoặc một mô-đun hoặc một thủ tục được lưu trữ để sử dụng tên mới thông qua từ đồng nghĩa. Phần còn lại của mã có thể tiếp tục sử dụng tên cũ. Bạn sẽ không bỏ từ đồng nghĩa và đổi tên cho đến khi tất cả các mã được cập nhật.
Aaron Bertrand

0

Vâng, có nhiều cạm bẫy bạn có thể gặp phải khi thay đổi tên của bảng và cột. Bất kỳ mã SQL hoặc mã ứng dụng nào khác gọi chúng sẽ phải được đổi tên để khớp hoặc nó sẽ không hoạt động. Redgate tạo ra một số công cụ khá tốt có thể đi qua và thực hiện tất cả các thay đổi đối với các veiws / hàm / sprocs SQL phụ thuộc. Lời khuyên lớn nhất mà tôi có thể cung cấp cho bạn là trước tiên hãy thực hiện những thay đổi này trong môi trường DEV và KIỂM TRA KIỂM TRA để đảm bảo bạn đã sửa mã ở mọi nơi.

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.