2012-12-09 17 views
30

Tôi đang sử dụng Microsoft SQL Server Management Studio. Tôi có hai cơ sở dữ liệu một là cơ sở dữ liệu hệ thống, trong đó có cơ sở dữ liệu chủ và cơ sở dữ liệu khác là cơ sở dữ liệu của tôi được gọi là CCTNS_CAS_DE_DB. Khi tôi cố gắng tạo báo cáo thông qua công cụ sử dụng cơ sở dữ liệu CCTNS_CAS_DE_DB.Lỗi đối chiếu

tôi nhận được lỗi sau:

Cannot resolve the collation conflict between "Latin1_General_CI_AI" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation

tôi đã đi qua SQL Server và kiểm tra các thuộc tính của cơ sở dữ liệu tổng thể nó cho thấy collation như Latin1_General_CI_AI nhưng khi tôi đến các thuộc tính của cơ sở dữ liệu CCTNS_CAS_DE_DB nó cho thấy collation là SQL_Latin1_General_CP1_CI_AS.

Tôi đã tìm kiếm lỗi trực tuyến nhưng hầu hết giải pháp cho biết cách thay đổi collation của một bảng cụ thể nhưng tôi không gặp bất kỳ truy vấn nào sẽ thay đổi collation cơ sở dữ liệu của tôi thành Latin1_General_CI_AI.

Tôi đã xem qua một truy vấn đó là: -

ALTER DATABASE CCTNS_CAS_DE_DB COLLATE Latin1_General_CI_AI 

Khi tôi chạy truy vấn này trong SQL Server của tôi nó đã ném các lỗi sau: -

Msg 5030, Level 16, State 2, Line 1
The database could not be exclusively locked to perform the operation.
Msg 5072, Level 16, State 1, Line 1
ALTER DATABASE failed. The default collation of database 'CCTNS_CAS_DE_DB' cannot be set to Latin1_General_CI_AI.

Tôi biết câu hỏi này đã được đăng ở đây nhưng đó là trong một bối cảnh khác nhau tôi nghĩ.

Trả lời

16

Dưới đây là gợi ý lớn nhất đối với vấn đề của bạn:

Msg 5030, Level 16, State 2, Line 1 The database could not be exclusively locked to perform the operation.

Những gì bạn cần làm là thiết lập cơ sở dữ liệu sang chế độ đơn người dùng trước khi bạn chạy báo cáo kết quả ALTER DATABASE, và sau đó đặt nó trở lại chế độ đa người dùng khi nó hoàn thành. Điều này sẽ khóa cơ sở dữ liệu và làm cho nó chỉ có sẵn cho kết nối hiện tại, cho phép bạn chạy thành công câu lệnh ALTER DATABASE ... COLLATE.

Bạn có thể use SQL Server Management Studio or T-SQL commands để thực hiện việc này.

+0

tôi thực hiện các truy vấn sau đây (ALTER DATABASE CCTNS_CAS_DE_DB đối chiếu Latin1_General_CI_AI; GO) và đã có thể thay đổi collation của CCTNS_CAS_DE_DB db của tôi để Latin1_General_CI_AI từ SQL_Latin1_General_CP1_CI_AS nhưng trong khi tạo ra các báo cáo nó cho thấy cùng một lỗi tức là không thể giải quyết xung đột đối chiếu giữa "Latin1_General_CI_AI" và "SQL_Latin1_General_CP1_CI_AS" trong hoạt động bằng nhau. – Nitin

+0

Câu trả lời hay. cảm ơn – Behzad

80

Trước tiên, cần đặt nó thành SINGLE_USER.

ALTER DATABASE [database] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 

GO 

ALTER DATABASE [database] COLLATE SQL_1xCompat_CP850_CI_AS; 

GO 

ALTER DATABASE [database] SET MULTI_USER; 

GO 
+0

Hoạt động hoàn hảo. Cảm ơn! – JwJosefy

+2

Cảm ơn bạn đã không giả định rằng tôi đã biết SQL để đặt hoạt động một người dùng! –

+0

Cảm ơn @RAY. Làm việc tuyệt vời ... –

-1

làm việc một cách hoàn hảo Cảm ơn bạn rất nhiều

ALTER DATABASE [database] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 

GO 

ALTER DATABASE [database] COLLATE SQL_1xCompat_CP850_CI_AS; 

GO 

ALTER DATABASE [database] SET MULTI_USER; 

GO 
+2

Đây là bản sao chính xác của [câu trả lời của RAY] (https://stackoverflow.com/a/17377732/243373). Vui lòng không lặp lại các câu trả lời hiện có và/hoặc đặt lời cảm ơn làm câu trả lời. Thay vào đó, upvote câu trả lời (s) đã giúp bạn ra nhiều nhất, một khi bạn có đủ danh tiếng. –

Các vấn đề liên quan