Tôi đã đọc rằng sau SQL Server 2000, khả năng "hủy nhận dạng" một cột danh tính đã bị xóa. Và đó là "Theo thiết kế" (không chỉ là một tính năng còn thiếu).
Đây là một ví dụ tôi tìm thấy trên một blog . Nó liên quan đến việc cập nhật các bảng hệ thống. (Và khả năng đó đã bị loại bỏ sau SQL Server 2000.) Tôi hiểu rằng làm điều này thông qua các bảng hệ thống không phải là một ý tưởng hay. Tôi chỉ tự hỏi tại sao một tính năng để làm điều này theo cách khác không phải là xung quanh.
Làm việc xung quanh điều này sẽ gây cho tôi một lượng công việc đáng kể. (Sao chép nhiều hàng trăm triệu hàng vào các bảng mới trong môi trường không dung nạp thời gian chết.)
Vì vậy, tôi nghĩ rằng tôi sẽ hỏi "Tại sao".
Điều gì đã thay đổi trong Sql Server 2005 và các phiên bản mới hơn khiến điều này trở thành một điều tồi tệ? Hay nó luôn luôn xấu, và chỉ không bị khóa?
"Thực hành tốt nhất" (hoặc nguyên tắc tương tự) nào sẽ bị vi phạm bằng cách biến cột nhận dạng thành cột bình thường trở lại?
-
Cập nhật để trả lời yêu cầu "tại sao tôi làm việc này":
Đây là một bản tóm tắt cấp độ rất cao: Tôi sẽ bắt đầu thêm các phân vùng vào các bảng của mình. (Để tôi có thể lưu trữ / lọc dữ liệu cũ.) Điều đó thật dễ dàng. Nhưng đôi khi tôi cần di chuyển một bản ghi sang một phân vùng khác để nó không bị xóa (khi một phân vùng xuất hiện để lưu trữ / xóa). (Tôi có cột phân vùng tăng 2 lần để luôn có khoảng trống để di chuyển hàng sang phân vùng khác.)
Nhưng nếu cột phân vùng là cột định danh, thì tôi phải xóa và chèn lại giá trị (không có cách nào để cập nhật giá trị của cột nhận dạng). Mà gây ra vấn đề với nhân rộng.
Vì vậy, tôi muốn sử dụng một chuỗi thay vì một cột danh tính. Nhưng chuyển đổi đó là rất rất khó khăn trên cơ sở dữ liệu lớn.