項目裏客戶端忽然報錯,緣由是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,目前就先改下之前很差的寫法。兼容性