Sql server 为什么会出现SQL语法错误?

Sql server 为什么会出现SQL语法错误?,sql-server,tsql,linqpad,isnull,iif,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个参数。” 我尝试过移动参数,将“[blank]”更改为“[blank]”和“[blank]”,但没有任何帮助

正在尝试在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语法方面期待什么呢?

ISNULL
已经像是一个“if”类型的语句了

你可以换一个

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

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


顺便说一句,我不喜欢
ISNULL
的原因之一是它的名称不好。您可以假设给定它的名称,它将返回一个位-如果参数为null,则返回true;如果参数不为null,则返回false-您可以像您尝试的那样在“if”语句中使用它。但这不是它的工作方式

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

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


将两个参数合并成一个不可为空的结果就是将它们强制为一个。该函数实际上更强大,因为您可以提供多个参数-
合并(i.description,i.name,“[blank]”)
是完全有效的。

请不要在没有评论的情况下否决投票。如果这是重复的,请改为链接到原始版本。
ISNULL
COALESCE
:你认为COALESCE的定义和语音发音在这里有用吗,甚至相关吗?我个人觉得这有点侮辱。@AaronBertrand yes,我认为联合的定义是有帮助的。它不是一个常用的术语。答案是基于对
coalesce
是一个命名良好的函数的理解,因此消除对该术语含义的任何歧义是有帮助的。我怀疑你会发现我将该定义包括在内,就像我在你的评论中发现的那样,是一种侮辱。好吧,不管怎样……我的答案是什么其中的一部分是,如果有人不知道它的意思,或者不知道它的发音,你是在暗示他们没有能力自己查字典。你可以随意不同意;我只是告诉你它在我看来是什么样子。如果这是模棱两可的:In·sult·ing In suhl ting:给予或造成侮辱;b我编辑了你的答案,因为这个词的定义与答案无关。
ISNULL(t_item_group.description, '[blank]')