Khắc phục lỗi "Saving changes is not permitted" khi lưu bảng trong SQL Server

 Trong quá trình làm việc với Microsoft SQL Server Management Studio (SSMS) , đôi khi chúng ta cần thay đổi cấu trúc của 1 bảng nào đó ngay bằng giao diện đồ hoạ rất trực quan và thân thiện của SSMS. Tuy nhiên, đôi lúc chúng ta sẽ gặp phải thông báo lỗi "Saving changes is not permitted" khi chọn lưu bảng vừa thay đổi cấu trúc trong một Modal Dialog có tiêu đề là Save. Hậu quả là nỗ lực thay đổi cấu trúc chúng ta đã thực hiện trên bảng hiện tại đều bị SSMS khước từ ghi nhận.

NHẬN DẠNG LỖI "SAVING CHANGES IS NOT PERMITTED" CỦA SQL SERVER

Như đã trình bày, lỗi này xuất hiện khi chúng ta cố gắng thay đổi cấu trúc của bảng trong Microsoft SQL Server Management Studio, và cụ thể là trong những tình huống thay đổi cấu trúc bảng mà SQL Server buộc phải tạo lại bảng như:

  • Thay đổi kiểu dữ liệu của một hoặc nhiều cột trong bảng
  • Thay đổi các ràng buộc toàn vẹn NULL, NOT NULL
  • Thay đổi thứ tự của các cột trong bảng
  • Thêm cột mới vào giữa bảng
  • Xoá một hoặc nhiều cột khỏi bảng

Trong hình minh hoạ, chúng tôi đang thay đổi kiểu dữ liệu của cột b ở bảng tbtest từ kiểu dữ liệu INT thành kiểu dữ liệu NVARCHAR(50), sau thao tác này nếu chọn chức năng SAVE để lưu các thay đổi về cấu trúc lên bảng thì SSMS sẽ thông báo lỗi như sau:



NGUYÊN NHÂN GÂY RA LỖI "SAVING CHANGES IS NOT PERMITTED" TRONG SSMS CỦA SQL SERVER

Bản thân SSMS cho rằng, nếu chấp nhận thực hiện những hình thức thay đổi cấu trúc như đã liệt kê ở trên, SSMS sẽ phải yêu cầu SQL Server xoá bảng hiện tại (và các bảng có liên quan nếu có) rồi sau đó tạo lại. Như vậy, nếu không kiểm soát tốt những thay đổi cần thực hiện theo kiểu này, chúng ta có thể làm mất dữ liệu đang lưu trữ trên các bảng của hệ thống. Do đó, mặc định SQL Server bật thiết lập tuỳ chọn "ngăn chặn thao tác lưu bảng có cấu trúc bị thay đổi đến mức cần phải tạo lại bảng". 

Ngoài ra, điều cũng đáng lưu ý ở đây là Microsoft sử dụng biểu tượng cảnh báo (warning) trên hộp thoại này nhưng lại không cho chúng ta lưu lại các thay đổi trên bảng. (Điều này có vẻ không hợp lý so với cách SSMS hành xử trước đây)

CÁCH GIẢI QUYẾT LỖI "SAVING CHANGES IS NOT PERMITTED" CỦA SQL SERVER

Ngoài cách thay đổi cấu trúc bảng hiện có 1 cách nguy hiểm là xoá bảng cũ rồi tạo lại bảng mới (theo cấu trúc mới) mà SSMS mặc định khước từ thì chúng ta cũng có thể sử dụng câu lệnh SQL quen thuộc là ALTER TABLE để thay đổi cấu trúc của bảng mà không phải xoá và tạo lại bảng. Cho nên cách giải quyết thứ nhất là chuyển sang sử dụng T-SQL để thay đổi cấu trúc bảng.
Trong tình huống chúng ta vẫn muốn SSMS thực hiện các thay đổi theo kiểu re-create tables thì có thể tắt tùy chọn "Prevent saving changes that require table re-creation" trong Menu Tools/Options của SSMS ở mục Designers như hình minh hoạ



Chúc các bạn kiểm soát tốt những quyết định thay đổi cấu trúc bảng quan trọng của mình.

Tham khảo: itstudent