SQL字符串连接,仅当列不为空时才用','分隔

时间:2015-06-18 10:54:03

标签: sql sql-server string-concatenation

我想在我的数据库中更新字符串(varchar)列。我想连接','+ value。

这是有效的,但如果数据库列中的值为空,我不想添加','(逗号)。

开头有逗号是没有意义的。

UPDATE ImportState
SET ClientValidationRemark = ClientValidationRemark + ',' + @ClientValidationRemark
WHERE Id=@ImportId

当然,如果值不为空,我希望每次都添加逗号。你知道任何简单,干净的方法吗?我总是更新一行,@ImportId是主键。

3 个答案:

答案 0 :(得分:6)

好吧,首先让我说在单个列中保留分隔字符串是一个糟糕的数据库设计,只有一个例外:当数据从未在sql中使用并且需要作为应用程序中的分隔字符串时。在超过16年的编程中,我只有一次存储这样的值,而这正是这种情况。

但是,如果您选择存储分隔值,则可以轻松执行以下操作:

UPDATE ImportState
SET ClientValidationRemark = ISNULL(NULLIF(ClientValidationRemark, '') + ',', '') +
                             @ClientValidationRemark
WHERE Id=@ImportId

利用将字符串连接到空值的结果为null,我使用NULLIFClientValidationRemark中的空字符串值转换为null,然后{{1}将ISNULL转换回空字符串。

答案 1 :(得分:2)

这是一个未经测试的样本

UPDATE ImportState
SET ClientValidationRemark =
CASE ClientValidationRemark WHEN Null THEN @ClientValidationRemark
                            WHEN '' THEN @ClientValidationRemark
                            ELSE ClientValidationRemark + ',' + @ClientValidationRemark
END 
WHERE Id=@ImportId

答案 2 :(得分:1)

试试这个:

您可以使用COALESCE

UPDATE ImportState
SET 
    ClientValidationRemark = 
           COALESCE(ClientValidationRemark + COALESCE(',' + @ClientValidationRemark,''), 
                    @ClientValidationRemark) 
WHERE Id=@ImportId