SQL Server 2019中Function默认返回值会影响Function创建时规定的返回值类型

项目里客户端突然报错,原因是SQL Server中某个Function返回值有问题,拿来代码看还是比较简单的Function,虽然写法很不好,但是select dbo.fn_xxxfunction(0)返回值是空就有点奇怪。

1IF OBJECT_ID('fn_xxxfunction', 'FN') IS NOT NULL 2 DROP FUNCTION dbo.fn_xxxfunction 3GO 4 5CREATE FUNCTION fn_xxxfunction 6( 7 @Rec INT 8) 9RETURNS NVARCHAR(10) 10AS 11BEGIN 12 IF @Rec = 0 RETURN 'AAAAAAAAAA' ELSE IF @Rec = 1 RETURN 'BBBBBBBBBB' 13 14 RETURN '' 15END 16GO

同项目组跑的都是一套代码没有问题说明可能是数据库本身问题,想起来前几天把数据库兼容性改到SQL Server 2019了,降级到2017发现就没问题了。

试了一下转返回值类型,但是还是返回空。

IF @Rec = 0 RETURN CAST('AAAAAAAAAA' AS NVARCHAR(10)) ELSE IF @Rec = 1 RETURN CAST('BBBBBBBBBB' AS NVARCHAR(10))

把默认返回值类型改了就对了

RETURN CAST('' AS NVARCHAR(10))

理论上其实更标准肯定是

1IF OBJECT_ID('fn_xxxfunction', 'FN') IS NOT NULL 2 DROP FUNCTION dbo.fn_xxxfunction 3GO 4 5CREATE FUNCTION fn_xxxfunction 6( 7 @Rec INT 8) 9RETURNS NVARCHAR(10) 10AS 11BEGIN 12 DECLARE @Returns NVARCHAR(10) 13 14 IF @Rec = 0 15 SET @Returns = N'AAAAAAAAAA' 16 ELSE IF @Rec = 1 17 SET @Returns = N'BBBBBBBBBB' 18 ELSE SET @Returns = N'' 19 20 RETURN @Returns 21END 22GO

但是理论上Function在创建的时候就规定了返回值的类型,Function内的默认返回值不应该反过来影响到Function创建时规定的返回值类型,感觉不知道这个是新特性还是BUG,目前就先改下以前不好的写法。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

springboot2之优雅处理返回值

前言最近项目组有个老项目要进行前后端分离改造,应前端同学的要求,其后端提供的返回值格式需形如{"status":0,"message":"success","data":{}}方便前端数据处理。要实现前端同学这个需求,其实也挺简单的,

mysql中时间比较的实现

MySql中时间比较的实现unix\_timestamp()unix\_timestamp函数可以接受一个参数,也可以不使用参数。它的返回值是一个无符号的整数。不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数,如果使用参数,参数的类型为时间类型或者时间类型的字符串表示,则是从1970010100:00:0