Bạn có thể giải quyết vấn đề bằng cách buộc đối chiếu được sử dụng trong truy vấn là đối chiếu cụ thể, ví dụ:SQL_Latin1_General_CP1_CI_AS
hoặc DATABASE_DEFAULT
. Ví dụ:
SELECT MyColumn
FROM FirstTable a
INNER JOIN SecondTable b
ON a.MyID COLLATE SQL_Latin1_General_CP1_CI_AS =
b.YourID COLLATE SQL_Latin1_General_CP1_CI_AS
Trong truy vấn trên, a.MyID và b.YourID sẽ là các cột có kiểu dữ liệu dựa trên văn bản. Sử dụng COLLATE
sẽ buộc truy vấn bỏ qua đối chiếu mặc định trên cơ sở dữ liệu và thay vào đó sử dụng đối chiếu được cung cấp, trong trường hợp này là SQL_Latin1_General_CP1_CI_AS
.
Về cơ bản những gì đang diễn ra ở đây là mỗi cơ sở dữ liệu có đối chiếu riêng của nó "cung cấp các quy tắc sắp xếp, thuộc tính chữ hoa và dấu cho dữ liệu của bạn" (từ http://technet.microsoft.com/en-us/library/ms143726.aspx ) và áp dụng cho các cột có kiểu dữ liệu văn bản , ví dụ. VARCHAR
, CHAR
, NVARCHAR
, v.v. Khi hai cơ sở dữ liệu có các đối chiếu khác nhau, bạn không thể so sánh các cột văn bản với một toán tử như bằng (=) mà không giải quyết xung đột giữa hai đối chiếu khác nhau.