0

尝试在 LINQPad 4 中运行此查询:

SELECT item_group_id as AccountID, IIF(ISNULL(t_item_group.description),'[blank]',t_item_group.description) AS Name 
FROM t_item_group 
WHERE active = TRUE

我明白了,“ isnull 函数需要 2 个参数。

我试过移动括号,将 "[blank]" 更改为 "[blank]" 和 "[blank]" ,但没有任何帮助......

由于这个原因,LINQPad 不会运行的查询(我有两个类似的查询(使用 IIF(ISNULL)),但它们实际上(在我的 Web API 应用程序中)运行良好;所以,LINQPad 比它需要的更“挑剔”也许是,但它期望什么,SQL 语法?

4

1 回答 1

2

ISNULL已经像一个'if'类型的语句。

你可以更换

IIF(ISNULL(t_item_group.description),'[blank]',t_item_group.description)

ISNULL(t_item_group.description, '[blank]')

使用ISNULL第一个参数(“描述”),除非该值为空,在这种情况下它将使用第二个参数。


顺便说一句,我不关心的原因之一ISNULL是它的名字很糟糕。您假设给定它的名称,它将返回一点 - 如果参数为 null,则返回 true,如果不为 null,则返回 false - 您可以像您尝试的那样在“if”语句中使用它。但这不是它的工作原理。

另一种方法是使用COALESCE. 它提供了几乎相同的功能,但命名是有意义的。

co·a·lesce ˌkōəˈles动词 1. 聚集在一起形成一个整体或整体。

COALESCE两个参数是强制它们成为一个不可为空的结果。而且该功能实际上更强大,因为您可以提供多个参数 -COALESCE(i.description, i.name, '[blank]')是完全有效的。

于 2014-01-27T23:06:11.173 回答