2010-10-05 21 views
23

tôi nhận được lỗi này trong khi phát triển thủ tục lưu trữLỗi máy chủ SQL "Chuyển đổi ngầm định vì việc đối chiếu giá trị chưa được giải quyết do xung đột đối chiếu".

chuyển đổi ngầm có giá trị varchar để varchar không thể thực hiện vì collation của giá trị là chưa được giải quyết do một cuộc xung đột đối chiếu.

tuyên bố là như thế này

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1 
UNION ALL 
Select '' AS Place, 'Arizona' As State, Country FROM DEPT2 

nhưng Nếu Nếu làm được điều này nó cũng cung cấp cho cùng một lỗi

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1 
UNION ALL 
Select '' COLLATE DATABASE_DEFAULT AS Place, 'Arizona' As State, Country FROM DEPT2 

Trên thực tế mã này được viết bởi một số ai khác và tôi chỉ chỉnh sửa mã, không biết lý do tại sao anh ấy thêm COLLATE DATABASE_DEFAULT nhưng nếu tôi xóa nó cũng đưa ra cùng một lỗi

Chuyển đổi ngầm định giá trị varchar thành varchar không thể được thực hiện vì collation của giá trị chưa được giải quyết do xung đột collation.

Trả lời

46

Bạn cần COLLATE ở cả hai nơi có khả năng nhất.

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1 
UNION ALL 
Select '' COLLATE DATABASE_DEFAULT AS Place, 'Arizona' As State, Country FROM DEPT2 

Chỉnh sửa: Bạn có thể cần nó trên tất cả các chuỗi nếu bạn nhận được nó trong một nơi

Select 
    City COLLATE DATABASE_DEFAULT AS Place, 
    State COLLATE DATABASE_DEFAULT AS State, 
    Country COLLATE DATABASE_DEFAULT AS Country 
FROM DEPT1 
UNION ALL 
Select 
    '' COLLATE DATABASE_DEFAULT, 
    'Arizona' COLLATE DATABASE_DEFAULT , 
    Country COLLATE DATABASE_DEFAULT 
FROM DEPT2 

Edit2:

Nó xảy ra vì đối chiếu cột của bạn có lẽ là khác nhau để đối chiếu cơ sở dữ liệu của bạn. Vì vậy, "Thành phố" có một collation nhưng hằng số chuỗi có khác.

+0

vâng ... nhưng Nó cũng cho cùng một lỗi – Azhar

+1

Làm thế nào tôi có thể loại bỏ đối chiếu DATABASE_DEFAULT này ở tất cả các từ tuyên bố của tôi ... tại sao là nó thực thi để sử dụng này ... Trên thực tế có 45 cột trong một tuyên bố và về công đoàn TẤT CẢ 6 báo cáo và nhiều hơn nữa một nửa là chuỗi ... – Azhar

+0

Đây là một mẹo tốt cho tôi, khi tôi đã được giao dịch với lựa chọn từ một vài bảng SYS (hoặc các khung nhìn) để tìm ra những gì được cấp phép cho tất cả các máy chủ-đăng nhập của tôi (các hiệu trưởng) đã được đưa ra. – NateJ

1

ALTER TABLE DEPT1 và DEPT2 để dẫn đến định nghĩa của bảng không chứa bất kỳ đối chiếu

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