SQL Server 2019中Function默認返回值會影響Function建立時規定的返回值類型

項目裏客戶端忽然報錯,緣由是SQL Server中某個Function返回值有問題,拿來代碼看仍是比較簡單的Function,雖然寫法很很差,可是select dbo.fn_xxxfunction(0)返回值是空就有點奇怪。數據庫

IF OBJECT_ID('fn_xxxfunction', 'FN') IS NOT NULL
    DROP FUNCTION dbo.fn_xxxfunction
GO

CREATE FUNCTION fn_xxxfunction
(
    @Rec INT
)
RETURNS NVARCHAR(10)
AS
BEGIN
    IF @Rec = 0 RETURN 'AAAAAAAAAA' ELSE IF @Rec = 1 RETURN 'BBBBBBBBBB'

    RETURN ''
END
GO

同項目組跑的都是一套代碼沒有問題說明多是數據庫自己問題,想起來前幾天把數據庫兼容性改到SQL Server 2019了,降級到2017發現就沒問題了。code

試了一下轉返回值類型,可是仍是返回空。io

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

把默認返回值類型改了就對了function

RETURN CAST('' AS NVARCHAR(10))

理論上其實更標準確定是class

IF OBJECT_ID('fn_xxxfunction', 'FN') IS NOT NULL
    DROP FUNCTION dbo.fn_xxxfunction
GO

CREATE FUNCTION fn_xxxfunction
(
    @Rec INT
)
RETURNS NVARCHAR(10)
AS
BEGIN
    DECLARE @Returns NVARCHAR(10)

    IF @Rec = 0
        SET @Returns = N'AAAAAAAAAA'
    ELSE IF @Rec = 1
        SET @Returns = N'BBBBBBBBBB'
    ELSE SET @Returns = N''

    RETURN @Returns
END
GO

可是理論上Function在建立的時候就規定了返回值的類型,Function內的默認返回值不該該反過來影響到Function建立時規定的返回值類型,感受不知道這個是新特性仍是BUG,目前就先改下之前很差的寫法。兼容性

相關文章
相關標籤/搜索