Подтвердить что ты не робот

Как сделать SQL Memory оптимизирована Нативная скомпилированная функция Детерминированная

Вот действительно, действительно простая функция, она возвращается детерминированной. Если я его скомпилирую, он уже не будет детерминированным. Как я могу сделать его родным скомпилированным и детерминированным?

CREATE FUNCTION [hash].[HashDelimiter2]()
RETURNS NCHAR(1)
WITH SCHEMABINDING
AS BEGIN
        RETURN N';'
END
GO

/* This does indeed result in YES */
SELECT IS_DETERMINISTIC
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'HashDelimiter2'



/* But then compile it native and it no longer deterministic */
CREATE FUNCTION [hash].[HashDelimiter3]()
RETURNS NCHAR(1)
WITH NATIVE_COMPILATION, SCHEMABINDING
AS BEGIN ATOMIC WITH (
    TRANSACTION ISOLATION LEVEL = SNAPSHOT,
    LANGUAGE = N'English'
)
    RETURN N';'
END
GO

/* This results in NO */
SELECT IS_DETERMINISTIC
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'HashDelimiter3'
4b9b3361

Ответ 1

только предположение, у меня нет 2016, чтобы проверить его,
но я постараюсь изменить:

RETURN N';'

TO

DECLARE @R AS NCHAR(1) = N';'
RETURN @R

Я думаю, проблема в том, что N';' создается как NVARCHAR(1), а затем неявно преобразован в NCHAR(1), поэтому, возможно, преобразование делает его недетерминированным.