我有以下查询。我试图只添加值,如果值不为null,那么整个变量最终不会为null。显然,下面的查询是错误的,但我不想在测试列上使用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
答案 0 :(得分: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
答案 1 :(得分:1)
我认为应该是:
SELECT
@DocID = CASE
WHEN test IS NOT NULL
THEN COALESCE(@DocID + ',' ,'') + test
ELSE NULL
END
FROM @Test
这会将最后一行的test
值分配给@DocID
。这意味着使用此表:
test -------------------- NULL adfasdfasd
@DocId
将为adfasdfasd
使用此表:
test -------------------- adfasdfasd NULL
@DocId
将为NULL
答案 2 :(得分: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;
答案 3 :(得分: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