【发布时间】:2018-07-06 05:11:15
【问题描述】:
在 T-SQL 中执行这个函数:
CREATE FUNCTION [dbo].[Parse_URI_For_Scheme](
@URI nvarchar(4000))
RETURNS nvarchar(250)
WITH SCHEMABINDING
AS
BEGIN
DECLARE @temp_string varchar(4000)
DECLARE @return_string nvarchar(250)
DECLARE @pos int
SET @pos = CHARINDEX('://', @URI);
--select @pos
IF @pos > 0
BEGIN
SET @temp_string = SUBSTRING(@URI, 0, @pos);
-- SET @pos = CHARINDEX('/', @temp_string)
IF @pos > 0
BEGIN
SET @temp_string = LEFT(@temp_string, @pos - 1);
SET @pos = CHARINDEX('@', @temp_string);
IF @pos > 0
SET @return_string = SUBSTRING(@temp_string, @pos + 1, 250);
ELSE
SET @return_string = @temp_string;
END
ELSE
SET @return_string = '';
END
ELSE
SET @return_string = '';
RETURN @return_string;
END;
然后执行这个返回0的命令:
SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].Parse_URI_For_Scheme'), 'IsDeterministic')
谁能告诉我为什么这不是确定性函数?
【问题讨论】:
-
顺便说一句,为什么不在你声明它之后立即将return_string设置为空字符串呢?您可以删除一些仅此而已的 else ,使其更容易遵循。
-
它为我返回 1,正如预期的那样!
-
也为我返回 1。哪个版本的sql server?
-
您可能更适合将其转换为内联表值函数而不是标量函数。
-
这里也一样,函数是确定性的……(返回
1)。您确定要检查正确的数据库/版本/架构吗?是否涉及交易?
标签: sql-server tsql non-deterministic