为什么我会遇到SQL语法错误?

时间:2014-01-27 23:03:40

标签: sql-server tsql linqpad isnull iif

尝试在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语法方面呢?

1 个答案:

答案 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]')完全有效。