我正在尝试编写一个计算为布尔值的 T-SQL 函数。
我已经阅读了几篇文章,指出 BIT 是 T-SQL 等效于 BOOLEAN 类型(例如Microsoft SQL Server 中是否有像 MySQL 中那样的布尔数据类型?,http://social.msdn.microsoft.com/论坛/en-US/transactsql/thread/c3143a77-c921-40a7-920e-3d5c5f7a269a)。
然而,当我创建返回 BIT 的函数时:
create function dbo.fn_checkLength( @name nvarchar(50), @maxLength int) returns bit
as begin
if len(@name) > @maxLength return cast(0 as bit);
return cast(1 as bit);
end;
GO
它不像一个计算结果为布尔值的函数,因为以下语句:
create table dbo.test_table (
id int,
name nvarchar(50),
constraint
ck_test_table_maxLength
check (
dbo.fn_checkLength(name, 10)
)
);
GO
给我:
消息 4145,级别 15,状态 1,第 10 行
在预期条件的上下文中指定的非布尔类型表达式,靠近“)”。
为了使它起作用,在调用我的函数时,我在组合中添加了一个布尔运算符,以真正使表达式为布尔值:
create table dbo.test_table (
id int,
name nvarchar(50),
constraint
ck_test_table_maxLength
check (
dbo.fn_checkLength(name, 10) > 0
)
);
GO
为什么会这样?有没有办法将可在 T-SQL 语句中使用的函数声明为常规布尔表达式?
谢谢!