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 が実行されないクエリ (2 つの同様のクエリ (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最初のパラメーター (「説明」) を使用しますが、その値が null の場合は 2 番目のパラメーターを使用します。


余談ですが、私が気にしない理由の 1 つは、ISNULL名前が不十分であることです。その名前を指定すると、パラメータが null の場合は true、null でない場合は false が返されると想定されます。これは、試みたように「if」ステートメントで使用できます。しかし、それはそれがどのように機能するかではありません。

別の方法は、 を使用することCOALESCEです。ほぼ同じ機能を提供しますが、名前は理にかなっています。

co·a·lesce ˌkōəˈles動詞 1. 集まって、1 つの塊または全体を形成する。

パラメータをCOALESCE2 つにすることは、それらを強制的に 1 つの null 非許容の結果にすることです。複数のパラメーターを指定できるため、この関数は実際にはより強力です。これCOALESCE(i.description, i.name, '[blank]')は完全に有効です。

于 2014-01-27T23:06:11.173 に答える