SQL serwer pozwala na to, żeby na serwerze obowizywało inne collation niż w bazie danych. Ale jeśli utworzysz obiekt tymczasowy, apotem zechcesz wykonywać złaczenia (JOIN) z tym obiektem, to… marny twój los.
Tym razem programista zdecydował się utworzyć procedurę tymczasowa:
CREATE PROCEDURE #test @statement VARCHAR(50)
AS
…
IF @STATEMENT IN (’DISPLAY’, 'HIDE’)
BEGIN
…
Podczas tworzenia procedury pojawiał się bład:
Implicit conversion of varchar value to varchar cannot be performed because the collation of the value is unresolved due to a collation conflict.
Ale co jest złe? Parametr, cała procedura, IF?
Pomogła następujca poprawka:
IF @STATEMENT IN (’DISPLAY’ COLLATE DATABASE_DEFAULT , 'HIDE’ COLLATE DATABASE_DEFAULT)
Najwyraźniej stałe napisowe korzystały z collation specyficznego dla serwera (tempdb). Collation DATABASE_DEFAULT wyraźnie precyzuje jak porównywać napisy.