SQL 服务器中的简单 ISEMPTY() 函数抛出非布尔类型错误

Simple ISEMPTY() function in SQL Server throws a non-boolean type error

我正在尝试在 Microsoft SQL 服务器中编写一个简单的 ISEMPTY 函数:

DROP FUNCTION IF EXISTS ISEMPTY;
GO

CREATE FUNCTION ISEMPTY
    (@charsequence nvarchar(max))
RETURNS BIT 
AS
BEGIN
    DECLARE @result BIT;

    IF (@charsequence IS NULL OR LEN(@charsequence) = 0)
        SET @result = 1
    ELSE
        SET @result = 0;

    RETURN @result;
END
GO

当我想测试它时:

SELECT CASE WHEN dbo.ISEMPTY('') THEN 'REACHED!' END;

我收到以下错误:

[S0001][4145] Line 1: An expression of non-boolean type specified in a context where a condition is expected, near 'THEN'.

这里出了什么问题?

case 表达式中的 when 之后需要一个布尔值,但是你的函数 returns 是 bit.

试试这个:

SELECT CASE WHEN dbo.ISEMPTY('') = 1 THEN 'REACHED!' END;

函数returns一个数字,所以你需要与一个数字进行比较以获得布尔值

CREATE FUNCTION ISEMPTY( @charsequence nvarchar(max))
returns BIT AS
    begin
        DECLARE @result BIT;

        IF (@charsequence IS NULL  OR LEN(@charsequence) = 0 ) 
            SET @result = 1;
        ELSE
            SET @result = 0;

        RETURN @result;
    end
GO
SELECT CASE WHEN dbo.ISEMPTY('') = 1 THEN 'REACHED!' END;
GO
| (No column name) |
| :--------------- |
| REACHED!         |

db<>fiddle here