SET ANSI_NULLS ON;
SET QUOTED_IDENTIFIER ON;
DECLARE @sql nvarchar(max) =
OBJECT_DEFINITION(OBJECT_ID(N'dbo.Polina_HouseKey_v2'));
IF @sql IS NULL
THROW 51630, N'Функция не найдена или недоступно её определение.', 1;
IF CHARINDEX(N'@codePoint', @sql) = 0
THROW 51631, N'Сначала установите предыдущее исправление с проверкой Unicode.', 1;
-- Допустимые символы проверяются в конце функции по Unicode.
-- Здесь оставляем ограничение длины вместо спорного шаблона LIKE.
SET @sql = REPLACE(
@sql,
N'@token COLLATE Latin1_General_100_BIN2 LIKE N''%[^0-9а-яa-z/-]%''',
N'LEN(@token)>100'
);
SET @sql = REPLACE(
@sql,
N'@token COLLATE Latin1_General_100_BIN2 NOT LIKE N''%[^0-9а-яa-z/-]%''',
N'LEN(@token)<=100'
);
SET @sql = REPLACE(@sql, N'CREATE FUNCTION', N'ALTER FUNCTION');
EXEC sys.sp_executesql @sql;
GO
SELECT
dbo.Polina_House_v2(N'дом 24-1') AS [ожидается 24-1],
dbo.Polina_House_v2(N'дом 24/1') AS [ожидается 24/1],
dbo.Polina_House_v2(N'дом 24?') AS [ожидается NULL];