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.

Dodaj komentarz:

Autor: Rafał Kraik