我想在我的数据库中更新字符串(varchar
)列。我想连接','+ value。
这是有效的,但如果数据库列中的值为空,我不想添加','(逗号)。
开头有逗号是没有意义的。
UPDATE ImportState
SET ClientValidationRemark = ClientValidationRemark + ',' + @ClientValidationRemark
WHERE Id=@ImportId
当然,如果值不为空,我希望每次都添加逗号。你知道任何简单,干净的方法吗?我总是更新一行,@ImportId
是主键。
答案 0 :(得分:6)
好吧,首先让我说在单个列中保留分隔字符串是一个糟糕的数据库设计,只有一个例外:当数据从未在sql中使用并且需要作为应用程序中的分隔字符串时。在超过16年的编程中,我只有一次存储这样的值,而这正是这种情况。
但是,如果您选择存储分隔值,则可以轻松执行以下操作:
UPDATE ImportState
SET ClientValidationRemark = ISNULL(NULLIF(ClientValidationRemark, '') + ',', '') +
@ClientValidationRemark
WHERE Id=@ImportId
利用将字符串连接到空值的结果为null,我使用NULLIF
将ClientValidationRemark
中的空字符串值转换为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