首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使SQL标量函数既具有确定性又具有变量缺省值

如何使SQL标量函数既具有确定性又具有变量缺省值
EN

Stack Overflow用户
提问于 2018-08-02 00:08:14
回答 1查看 43关注 0票数 1
代码语言:javascript
复制
--DROP FUNCTION fn_NonDeterministic;
--DROP FUNCTION fn_Deterministic

CREATE FUNCTION [dbo].[fn_NonDeterministic]()
RETURNS DECIMAL (13,3)
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @date AS DATETIME = '01/01/1900';
    RETURN 10.2
END
GO


SELECT ROUTINE_NAME,
       IS_DETERMINISTIC
FROM   INFORMATION_SCHEMA.ROUTINES
WHERE  ROUTINE_NAME = 'fn_NonDeterministic'
GO

CREATE FUNCTION [dbo].[fn_Deterministic]()
RETURNS DECIMAL (13,3)
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @date AS DATETIME ;
    RETURN 10.2
END
GO


SELECT ROUTINE_NAME,
       IS_DETERMINISTIC
FROM   INFORMATION_SCHEMA.ROUTINES
WHERE  ROUTINE_NAME = 'fn_Deterministic'
EN

回答 1

Stack Overflow用户

发布于 2018-08-02 00:25:16

我不认为它喜欢从字符串到日期的转换,这是确定性的,因为它受到区域设置的影响。

代码语言:javascript
复制
/*
dROP FUNCTION fn_NonDeterministic;
DROP FUNCTION fn_Deterministic
*/


CREATE FUNCTION [dbo].[fn_NonDeterministic]()
RETURNS DECIMAL (13,3)
WITH SCHEMABINDING
AS
BEGIN
    -- ********************************  this changes things ***********
    DECLARE @date AS datetime = datefromparts(1970,05,23);
    RETURN 10.2
END
GO


SELECT ROUTINE_NAME,
       IS_DETERMINISTIC
FROM   INFORMATION_SCHEMA.ROUTINES
WHERE  ROUTINE_NAME = 'fn_NonDeterministic'
GO
CREATE FUNCTION [dbo].[fn_Deterministic]()
RETURNS DECIMAL (13,3)
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @date AS DATETIME ;
    RETURN 10.2
END
GO


SELECT ROUTINE_NAME,
       IS_DETERMINISTIC
FROM   INFORMATION_SCHEMA.ROUTINES
WHERE  ROUTINE_NAME = 'fn_Deterministic'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51637841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档