Krzysztof
Gil
Projektant,
programista,
szkoleniowiec
Temat: Dziwny problem w funkcji T-SQLa
Ostatnio stworzyłem funkcję do składania stringu parametrów przy sortowaniu po dowolnej liczbie dowolnych pól tabeli:CREATE FUNCTION [dbo].[GetSortString] (@FunctionID INT)
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @ReturnVal VARCHAR(255)
SET @ReturnVal='' COLLATE SQL_Polish_CP1250_CI_AS
SELECT @ReturnVal=@ReturnVal + AttributName + ' ' + SortMetod + ' ,' COLLATE SQL_Polish_CP1250_CI_AS
FROM SortString
WHERE FunctionID=@FunctionID AND UserName=suser_sname()
IF LEN(@ReturnVal) > 1 SET @ReturnVal= SUBSTRING(@ReturnVal,1,LEN(@ReturnVal)-1) COLLATE SQL_Polish_CP1250_CI_AS
RETURN( @ReturnVal )
END
gdzie SortString jest widokiem zwracającym uporządkowaną listę atrybutów i metod sortowania (AttributName, SortMetod) dla danej funkcji/tabeli (FunctionID) i użytkownika (UserName). Specjalnie dodałem COLLATE, aby nie mieć problemów z kodowanie znaków.
Okazało się, że w jednej bazie działa super, a w drugiej pojawia się błąd 457: "Implicit conversion of varchar value to varchar cannot be performed because the collation of the value is unresolved due to a collation conflict"
Oczywiście baza ma inny standard kodowania znaków, niż ta działająca, ale miałem nadzieję, że konwersja COLLATE sobie z tym poradzi. Czyżby nie można było takiej funkcji zbudować na systemie, w którym są różne standardy kodowania dla poszczególnych baz/ tabel?