4

次のクエリがあります。値がnullでない場合、変数全体がnullにならない場合にのみ、値を追加しようとしています。明らかに、以下のこのクエリはエラーになっていますが、変数テキストの最後にコンマを置くため、テスト列でISNULLチェックを使用したくありません。変数テキストの最後にコンマを付けずにこれを行うにはどうすればよいですか。テスト列にnullが含まれる場合と、含まれない場合があります。

DECLARE @Test TABLE
(
    test varchar(20)
)

INSERT INTO @Test
SELECT 'adfasdfasd'
UNION ALL
SELECT NULL


DECLARE @DocID varchar(max)

SELECT CASE WHEN test IS NOT NULL THEN @DocID = COALESCE(@DocID + ',' ,'')  + test END
FROM @Test

SELECT @DocID
4

4 に答える 4

3

次のいずれかが機能するはずです

SELECT @DocID = COALESCE(@DocID + ',', '') + test
FROM   @Test
WHERE  test IS NOT NULL 

また

SELECT @DocID = CASE
                  WHEN test IS NULL THEN @DocID /*No-op. */
                  ELSE COALESCE(@DocID + ',', '') + test
                END
FROM   @Test
于 2012-11-02T21:31:09.000 に答える
1

私はそれがすべきだと信じています:

SELECT
    @DocID = CASE
        WHEN test IS NOT NULL
            THEN COALESCE(@DocID + ',' ,'')  + test
        ELSE NULL
    END
FROM @Test

これにより、最後の行の値がに割り当てtestられ@DocIDます。これは、このテーブルでは次のことを意味します。

テスト
--------------------
ヌル
adfasdfasd

@DocIdになりますadfasdfasd

そしてこの表で:

テスト
--------------------
adfasdfasd
ヌル

@DocIdになりますNULL

于 2012-11-02T21:13:51.403 に答える
1

他のフィールドが関係している場合にのみ、そのパターンが必要です

SELECT @DocID = COALESCE(@DocID + ',' + test, test, @DocID),
       @otherfield ....
FROM @Test;

それ以外の場合は、Martin がコメントしたように、WHERE を使用して NULL を削除すると簡単になります

SELECT @DocID = COALESCE(@DocID + ',', '') + test
FROM @Test
WHERE test IS NOT NULL;
于 2012-11-02T21:34:11.180 に答える
0
DECLARE @Test TABLE
(
    test varchar(20)
)

INSERT INTO @Test
SELECT 'adfasdfasd'
UNION ALL
SELECT NULL
UNION ALL
SELECT 'Nasenbär'



DECLARE @DocID varchar(max)
Select @DocID=''
SELECT
     @DocID=@DocID + CASE
        WHEN test IS NOT NULL
            THEN Case when LEN(@DocID)>0 then ', ' else '' end + test
        ELSE ''
    END
FROM @Test

SELECT @DocID
于 2012-11-02T21:23:35.747 に答える