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
我正在尝试在 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