SQL Server 2008R2 chuyển đổi đối chiếu


7

Tôi có một cơ sở dữ liệu hiện có sử dụng Arabic_CI_ASđối chiếu, nhưng tôi cần chuyển đổi nó thành SQL_Latin1_General_CP1_CI_ASđối chiếu mặc định cho máy chủ, nhưng vấn đề là khi tôi sử dụng lệnh sau:

USE master;
GO

ALTER DATABASE MyDB
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO

Nó cho tôi thông báo lỗi sau:

Msg 5075, Cấp 16, Trạng thái 1, Dòng 1
Đối tượng 'GetAllSuppliersInCompliance' phụ thuộc vào đối chiếu cơ sở dữ liệu. Đối chiếu cơ sở dữ liệu không thể thay đổi nếu một đối tượng ràng buộc lược đồ phụ thuộc vào nó. Loại bỏ các phụ thuộc vào đối chiếu cơ sở dữ liệu và sau đó thử lại hoạt động.

Msg 5075, Cấp 16, Trạng thái 1, Dòng 1
Đối tượng 'GetTier1SupplierComplianceStatus' phụ thuộc vào đối chiếu cơ sở dữ liệu. Đối chiếu cơ sở dữ liệu không thể thay đổi nếu một đối tượng ràng buộc lược đồ phụ thuộc vào nó. Loại bỏ các phụ thuộc vào đối chiếu cơ sở dữ liệu và sau đó thử lại hoạt động. .....

Msg 5072, Cấp 16, Bang 1, Dòng 1
THAY ĐỔI CƠ SỞ thất bại. Đối chiếu mặc định của cơ sở dữ liệu 'MyDB' không thể được đặt thành SQL_Latin1_General_CP1_CI_AS.

Vì vậy, tôi đã thử cách sau để vô hiệu hóa các ràng buộc tạm thời bằng cách sử dụng lệnh sau:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

Sau đó tôi đã thực hiện lệnh đầu tiên, tuy nhiên cùng một lỗi xuất hiện.

Câu trả lời:


6

Giả sử những đối tượng đó là các thủ tục hoặc khung nhìn được lưu trữ (chứ không phải các bảng), bạn sẽ cần:

  1. kịch bản các đối tượng trong câu hỏi
  2. thả chúng từ cơ sở dữ liệu (hoặc chỉ xóa liên kết lược đồ)
  3. thay đổi đối chiếu cơ sở dữ liệu
  4. tạo lại các đối tượng bằng cách chạy các kịch bản bạn đã tạo trong bước đầu tiên.

Ở một bên, bạn không cần phải sp_msforeachtable "ALTER TABLE..."


Cảm ơn, nhưng một số đối tượng là các bảng, vì vậy tôi phải thực hiện các thao tác sau: 1) lấy cấu trúc cơ sở dữ liệu nguồn thông qua trình tạo tập lệnh, 2) tạo cơ sở dữ liệu trống với đối chiếu đúng, 3) thực thi các tập lệnh trên cơ sở dữ liệu trống, 4) di chuyển dữ liệu từ nguồn sang đích.
Ahmad Abuhasna

1
@AhmadAbuhasna, tôi nghĩ rằng các lỗi bạn nhận được là do các đối tượng schemabound, như các hàm, các thủ tục được lưu trữ, các khung nhìn. Tôi sẽ đi với khuyến nghị của @Max Vernon, ngoại trừ việc thay vì bỏ các đối tượng, tôi sẽ chỉ xóa WITH SCHEMABINDING, thực hiện thay đổi đối chiếu trên cơ sở dữ liệu, sau đó áp dụng lại WITH SCHEMABINDING. Điều này để tránh mất quyền, thuộc tính mở rộng, vv mà bạn có thể bỏ qua do nhầm lẫn khi viết kịch bản đối tượng. Ngoài ra, tôi không chắc chắn rằng việc thay đổi đối chiếu cơ sở dữ liệu sẽ tự động thay đổi đối chiếu của mỗi bảng.
Daniel Hutmacher

Xin chào Daniel: Thực tế tôi đã nghỉ hưu để thực hiện các bước Max và nó đã hoạt động nhưng phải xóa một dòng khỏi các thủ tục gây ra sự cố với chuyển đổi cơ sở dữ liệu. nhưng nếu tôi loại bỏ lược đồ thì nó hoạt động tốt. cảm ơn
Ahmad Abuhasna
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.