SQL: Collation conflict – tymczasowa procedura

23-cze-2016

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.

Komentarze są wyłączone

Autor: Rafał Kraik