Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để khắc phục xung đột đối chiếu trong truy vấn SQL Server?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khi sử dụng GETDATE () ở nhiều nơi, tốt hơn là sử dụng một biến?

  2. Lưu trữ hình ảnh trong SQL Server?

  3. Khung thực thể tải rất chậm lần đầu tiên sau mỗi lần biên dịch

  4. Biểu diễn khác nhau của UUID trong Java Hibernate và SQL Server

  5. Làm cách nào để bạn đặt tự động gửi trong một phiên SQL Server?