Is your column really a varchar type, not an nvarchar ?
It looks like COLLATE SQL_Latin1_General_CP1253_CS_AS is deterministic for nvarchar but not deterministic for varchar .
The next function is deterministic. Note that you need N prefix string literals for it to work properly.
CREATE FUNCTION dbo.TestFunc1 (@ColumnValue NVARCHAR(4000)) RETURNS NVARCHAR(4000) WITH SCHEMABINDING AS BEGIN SET @ColumnValue = REPLACE(@ColumnValue COLLATE SQL_Latin1_General_CP1253_CS_AS, N'ı', N'i') --This character("ı") is converted to "?" after collation so that I manually replace it SET @ColumnValue = @ColumnValue COLLATE SQL_Latin1_General_CP1253_CS_AS --This line takes care of the other characters RETURN @ColumnValue END
If you need to use varchar , I would use binary sorting to replace specific characters. The following function is also deterministic.
CREATE FUNCTION dbo.TestFunc2 (@ColumnValue VARCHAR(8000)) RETURNS VARCHAR(8000) WITH SCHEMABINDING AS BEGIN SET @ColumnValue = REPLACE(@ColumnValue COLLATE Latin1_General_BIN2, N'ı', N'i') SET @ColumnValue = REPLACE(@ColumnValue COLLATE Latin1_General_BIN2, N'ö', N'o') ... RETURN @ColumnValue END
Vladimir Baranov
source share