0

私はSQLサーバーが初めてです。合体の使用をグーグルで調べたところ、それがISNULLの代わりの別の言葉であることがわかりました。

合体のさまざまな用途についてフォーラムに投稿されたコードに出くわしました。

use adventureworks

DECLARE @DepartmentName VARCHAR(1000)

SELECT @DepartmentName = COALESCE(@DepartmentName,'') + Name + ';' 
FROM HumanResources.Department
WHERE (GroupName = 'Executive General and Administration')

SELECT @DepartmentName AS DepartmentNames

結果を 1 行で返します。

では、以下のように .NET のようにデフォルトで SQL が文字列連結をサポートしていないのはなぜですか?

DECLARE @DepartmentName VARCHAR(1000)

    **SELECT @DepartmentName = @DepartmentName + Name + ';'**
    FROM HumanResources.Department
    WHERE (GroupName = 'Executive General and Administration')

    SELECT @DepartmentName AS DepartmentNames

以下の行での合体の使用は何ですか

SELECT @DepartmentName = COALESCE(@DepartmentName,'') + Name + ';' 

なぜ

**SELECT @DepartmentName = @DepartmentName + Name + ';'**
    FROM HumanResources.Department
    WHERE (GroupName = 'Executive General and Administration')

動かない?

4

4 に答える 4

2

coalesceパラメータリストの最初のnon-NULL引数の値を返すだけです。

例えば

1.select coalesce(NULL,0,2,1);

0 は NULL を意味しないため、0を返します。

2.select coalesce(id,emp_id,0) from tab1;

この場合、attribute-idが返されます。NOT NULLそれ以外の場合emp_idは is が返され、それ以外の場合はNOT NULL emp_id0 が返されます。

この場合、連結には+-operator または -function のいずれかを使用できconcat()ます。ただし、ここでは、連結または何らかの操作を行うと結果が になるcoalesce場合に使用されます。したがって、代わりに空白(つまり)を使用することが使用されています。DepartmentName=NULLNULLNULL''NULL coalesce()

この場合、宣言された時点でそのままcoalesce使用されていDepartmentNameます。MohoNULLが回答で示した構文を使用して、 の使用を置き換えます。coalesce

于 2013-10-05T02:43:38.007 に答える
0

COALESCE は、引数のリストから、NULL に評価されない最初の式を返します。

COALESCE(@DepartmentName,'') の例では、 #DepartmentName が NULL の場合、代わりに '' (空の文字列) が返されることを意味します。これが必要なのは、文字列を null 値と連結すると NULL が返されるためです。

SELECT 'test' + NULL -- NULL を返します

COALESCE (Transact-SQL)

于 2013-10-05T01:51:23.247 に答える
0

set @DepartmentName = ''後に追加するDECLARE @DepartmentName VARCHAR(1000)と、coalesce ステートメントは必要ありません。

編集:コメントが私のために物事を明確にした後に更新

于 2013-10-05T03:00:21.537 に答える
0

COALESCE()null 以外の最初の項を返します。このコード:

COALESCE(@DepartmentName,'') 

部門名が null の場合は空白を返すことを意味します。

nullaと何かを連結すると a が得られるnullため、使用しないと値もCOALESCE()失われnameます。

于 2013-10-05T01:44:50.450 に答える