【发布时间】:2014-07-30 21:09:54
【问题描述】:
我编写了一个返回一个选择的简单存储过程。
当我更新了我的EDMX model 并添加了新的存储过程后,我想知道返回的 Result 有一个 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 结果的图像。
提前致谢:)
【问题讨论】:
-
尝试在您的 Convert 周围添加一个 IsNull 函数和一个备用值。 IsNull(Convert..., false)
-
@kidshaw 谢谢。你是对的,如果我添加 ISNULL,它会起作用。但为什么?我写了一个不为空的值...所以它不应该有 ISNULL...
-
我认为,您需要明确说明,您返回的不是空值。我很确定,如果您使用外部查询并添加诸如
where IsAmerica is not null之类的 where 条件,那也将起作用。 -
@Rahul 不,我刚刚尝试过,如果我将它添加到 where 子句,它仍然可以为空 bool。
-
奇怪!不确定 EF,但您可以尝试我的答案中的替代方法。
标签: c# sql sql-server entity-framework stored-procedures