STUFF()
- это просто сокращение для более сложного выражения.Они приводят к одному и тому же результату:
DECLARE
@expr varchar(64) = 'hello there',
@start int = 6,
@chars int = 4,
@repl varchar(64) = 'bye';
SELECT STUFF(@expr,@start,@chars,@repl);
SELECT LEFT(@expr,@start-1) + @repl + SUBSTRING(@expr, @start + @chars, 64);
Игнорируя обработку ошибок для строк с 1 символом и других крайних случаев, таких как строки длиной более 1 миллиарда символов, вы можете создать функцию, которая абстрагирует STUFF()
для вас.В системе SQL Server функция выглядит следующим образом:
CREATE FUNCTION dbo.StuffForMe
(
@expr nvarchar(max),
@start int,
@chars int,
@repl nvarchar(max)
)
RETURNS nvarchar(max)
WITH SCHEMABINDING
AS
BEGIN
RETURN (SELECT STUFF(@expr,@start,@chars,@repl));
END
GO
А в H2:
CREATE FUNCTION dbo.StuffForMe
(
@expr nvarchar(max),
@start int,
@chars int,
@repl nvarchar(max)
)
RETURNS nvarchar(max)
WITH SCHEMABINDING
AS
BEGIN
RETURN (SELECT LEFT(@expr,@start-1) + @repl
+ SUBSTRING(@expr, @start + @chars, 1000000000));
END
GO
В этом случае ваше представление просто ссылается на dbo.StuffForMe
, поэтому не требуется переключаться между системамивам просто нужно развернуть две разные версии функций независимо друг от друга.