我编写了一个返回一个select的简单存储过程。
当我更新了我的EDMX model
并添加了新的存储过程时,我想知道返回的结果有一个Nullable bool(在存储过程中我总是返回0或1)。
为什么它会产生Nullable bool而不是bool?如何更改存储过程以便生成bool?
这是存储过程(这不是真正的存储过程,它只是为了演示问题):
ALTER PROCEDURE [dbo].[TestBool]
AS
BEGIN
SET NOCOUNT ON;
SELECT Title,
CONVERT(BIT, IIF([Address] = 'America', 1, 0)) IsAmerica,
CONVERT(BIT, IIF(Duration > 100, 1, 0)) IsLong
FROM dbo.Events
WHERE UserId > 10
END
Address
不为空,而Duration
为空(但这并不重要,因为这两个值都生成为Nullable bool)。
以下是EDMX
结果的图片。
提前致谢:)
答案 0 :(得分:1)
不是解决您的问题而是替代方案。如果您使用表变量并将其返回(如
),该怎么办?ALTER PROCEDURE [dbo].[TestBool]
AS
BEGIN
DECLARE @tab table (
Title varchar(100) not null,
IsAmerica bit not null,
IsLong bit not null
);
SET NOCOUNT ON;
INSERT INTO @tab(Title,IsAmerica,IsLong)
SELECT Title,
CONVERT(BIT, IIF([Address] = 'America', 1, 0)) IsAmerica,
CONVERT(BIT, IIF(Duration > 100, 1, 0)) IsLong
FROM dbo.Events
WHERE UserId > 10
SELECT Title,
IsAmerica,
IsLong
FROM @tab;
END
答案 1 :(得分:0)
仅使用Convert
或Cast
并不能保证edmx上的输出为空。您需要使用isnull()包装整个内容,如下所示:
isnull(cast(case when myBooleanField is not null then 1 else 0 end as bit),0) as IsBooleanValue