尝试在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个参数。”
我试过移动parens,将“[blank]”更改为“[blank]”和“[blank]”,但没有一个有用......
查询(我有两个类似的(使用IIF(ISNULL))LINQPad因为这个原因无法运行,但它们实际运行(在我的Web API应用程序中)很好;所以,LINQPad更“挑剔”也许是它需要的,但它的期望是什么,SQL语法方面呢?
答案 0 :(得分:2)
ISNULL
已经像'if'类型语句。
你可以直接替换
IIF(ISNULL(t_item_group.description),'[blank]',t_item_group.description)
带
ISNULL(t_item_group.description, '[blank]')
ISNULL
使用第一个参数('description'),除非该值为null,在这种情况下它将使用第二个参数。
顺便说一句,我不关心ISNULL
的原因之一是它的名字很差。您假设给定它的名称它将返回一点 - 如果参数为null则为true,如果不为null则为false - 您可以在“if”语句中使用它,就像您尝试的那样。但这不是它的工作方式。
另一种方法是使用COALESCE
。它提供了相同的功能,但命名很有意义。
co·a·lesce ˌkōəles动词 1.聚集在一起形成一个整体或整体。
要COALESCE
两个参数是强制它们成为一个不可为空的结果。而且该功能实际上更强大,因为您可以提供多个参数 - COALESCE(i.description, i.name, '[blank]')
完全有效。