gpt4 book ai didi

sql - 为什么 SQL 2005 说这个 UDF 是不确定的?

转载 作者:行者123 更新时间:2023-12-01 08:20:54 25 4
gpt4 key购买 nike

我有以下功能:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[IP4toBIGINT](
@ip4 varchar(15)
)
RETURNS bigint
WITH SCHEMABINDING
AS
BEGIN
-- oc3 oc2 oc1 oc0
-- 255.255.255.255
-- Declared as BIGINTs to avoid overflows when multiplying later on DECLARE @oct0 bigint, @oct1 bigint, @oct2 bigint, @oct3 bigint;
DECLARE @Result bigint;

SET @oct3 = CAST(PARSENAME(@ip4, 4) as tinyint);
SET @oct2 = CAST(PARSENAME(@ip4, 3) as tinyint);
SET @oct1 = CAST(PARSENAME(@ip4, 2) as tinyint);
SET @oct0 = CAST(PARSENAME(@ip4, 1) as tinyint);

-- Combine all values, multiply by 2^8, 2^16, 2^24 to bitshift.
SET @Result = @oct3 * 16777216 + @oct2 * 65536 + @oct1 * 256 + @oct0;
RETURN @Result;

END

但...
SELECT 
OBJECTPROPERTYEX(OBJECT_ID('dbo.IP4toBIGINT'), 'IsDeterministic') as IsDeterministic
,OBJECTPROPERTYEX(OBJECT_ID('dbo.IP4toBIGINT'), 'IsPrecise') as IsPrecise
,OBJECTPROPERTYEX(OBJECT_ID('dbo.IP4toBIGINT'), 'IsSystemVerified') as IsSystemVerified
,OBJECTPROPERTYEX(OBJECT_ID('dbo.IP4toBIGINT'), 'SystemDataAccess') as SystemDataAccess
,OBJECTPROPERTYEX(OBJECT_ID('dbo.IP4toBIGINT'), 'UserDataAccess') as UserDataAccess

返回(结果转置):

是确定性的 0

是精确的 1

IsSystemVerified 1

系统数据访问 0

用户数据访问 0

我多次尝试删除并重新创建该函数,以确保它不是缓存问题。 CAST 在这里应该是确定性的,因为我将它用于字符串-> 整数。

我完全被难住了,有什么想法吗?

最佳答案

PARSENAME 总体上是不确定的。是的,您在确定性的上下文中使用它,但我猜服务器不知道这一点。尝试替换 PARSENAME 并查看它是否发生变化。

关于sql - 为什么 SQL 2005 说这个 UDF 是不确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/571065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com