4

我有以下查询。我试图只添加值,如果值不为空,那么整个变量不会最终为空。显然,下面的这个查询出错了,但我不想在测试列上使用 ISNULL 检查,因为它在变量文本的末尾放置了一个逗号。如果变量文本末尾没有逗号,我将如何做到这一点。有时测试列中会有空值,有时则不会。

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

这将分配最后一行的值testto @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 回答