如何使SQL内存优化本机编译功能确定性
发布时间:2020-05-23 14:01:20 所属栏目:MsSql 来源:互联网
导读:这是一个非常简单的功能,它反映了确定性.如果我编译它本机,它不再是确定性的.我如何使其原生编译和确定性? CREATE FUNCTION [hash].[HashDelimiter2]()RETURNS NCHAR(1)WITH SCHEMABINDINGAS BEGIN RETURN N;ENDGO/* This does indeed result in YE
|
这是一个非常简单的功能,它反映了确定性.如果我编译它本机,它不再是确定性的.我如何使其原生编译和确定性? 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's 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'
解决方法只有一个猜测,我没有2016年测试,但我会尝试改变: RETURN N';' 至 DECLARE @R AS NCHAR(1) = N';' RETURN @R 我认为问题是N’;’被创建为NVARCHAR(1),然后隐式转换为NCHAR(1),所以也许转换使它不确定. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
