2011-12-16 31 views
7

Khi tôi phát hành một truy vấn SQL, đôi khi tôi nhận được thông báo lỗi sau:chiếu xung đột sql máy chủ

Không thể giải quyết mâu thuẫn đối chiếu giữa "Latin1_General_CI_AS" và "SQL_Latin1_General_CP1_CI_AS" trong bằng phẫu thuật.

Tôi thường giải quyết vấn đề này chỉ cần thực hiện cả hai bảng đối chiếu giống nhau. vì vậy tôi cần biết là có cách nào nhanh chóng để khắc phục vấn đề này.

Tôi muốn đặt một điều gì đó đặc biệt trong truy vấn SQL của mình như là kết quả nếu đối chiếu không giống nhau cho cả bảng trong truy vấn sql thì truy vấn sẽ hoạt động hoàn hảo mà không gặp bất kỳ lỗi nào. có giải pháp nào không?

Trả lời

12

Bạn có thể buộc mà đối chiếu bằng cách sử dụng mệnh đề COLLATE.

ví dụ:

SELECT * 
FROM Table1 T1 
INNER JOIN Server2.dbo.Table2 T2 
ON T1.Name = T2.Name COLLATE database_default 

xung đột Collation là phổ biến khi tham gia bảng giữa hai cơ sở dữ liệu hoặc máy chủ, đặc biệt là nếu các phiên bản của DB là khác nhau.

2

Bạn có thể chỉ định một collation trong một truy vấn bằng cách sử dụng collate clause:

where col1 = col2 collate Latin1_General_CI_AS 
0

Có thể có khả năng cả hai máy chủ đều sử dụng các collations khác nhau. Nếu có thì bạn sẽ nhận được một lỗi tương tự như sau đó tôi đã đề cập ở trên cùng của chủ đề này. Bạn nên làm gì trong trường hợp này?

  1. Bạn có thể thay đổi collation mặc định của một trong hai cột/trường bảng, nhưng điều này có thể có hiệu ứng gợn sóng cho các bảng khác hiện đang sử dụng với bảng đã thay đổi.

  2. Sử dụng đối chiếu DATABASE_DEFAULT từ khóa trong khi phù hợp với các cột/lĩnh vực

như:

SELECT T1.EmployeeName, T2.DeptName 
FROM ServerA.dbo.EmpTab T1 
JOIN ServerB.dbo.DeptTab T2 
ON T1.DeptCode COLLATE DATABASE_DEFAULT 
= T2.DeptCode COLLATE DATABASE_DEFAULT 
+0

Xin bao gồm định dạng thích hợp trong bài viết của bạn. –