来自现有值的更新列,使用SQL Server中的逗号分隔值

时间:2016-04-21 06:23:40

标签: c# sql asp.net sql-server

来自现有值的Update列,使用SQL Server中的逗号分隔值

tbl 
id name rev_code
1  aaa  rev1,rev2,rev3
2  bbb  rev2,rev3
3  ccc  rev1,rev2
4  ddd  rev3,rev2

我想要更新rev_code =' rev3'需要添加结束,如rev1,rev2,rev3,rev5

期待输出

id name rev_code
1  aaa  rev1,rev2,rev3,rev5
2  bbb  rev2,rev3,rev5
3  ccc  rev1,rev2
4  ddd  rev3,rev2,rev5

6 个答案:

答案 0 :(得分:3)

最佳选项是规范化您的数据库:
删除该rev_code列并将其转换为新表,并将外键约束链接到当前表。

如果那不可能,你可以这样做:

UPDATE tbl
SET rev_code = rev_code + ',rev5'
WHERE ','+ rev_code + ',' LIKE '%,rev3,%'
AND ','+ rev_code + ',' NOT LIKE '%,rev5,%'

答案 1 :(得分:1)

停止在违反 First Normal格式的列中存储逗号分隔值。考虑更改数据库设计

在最坏的情况下,使用此更新来获得结果

UPDATE Yourtable
SET    [rev_code] = [rev_code] + ',rev5'
WHERE  Charindex('rev3', [rev_code]) > 0 

答案 2 :(得分:1)

试试这个,

UPDATE table1 SET rev_code=rev_code +',rev5' 
where  rev_code like '%rev3%' and Charindex('rev5', [rev_code])= 0 

编辑:

 UPDATE table1 SET rev_code= rev_code +',rev5' 
 where rev_code  IS NOT NULL and rev_code like '%rev3%' and Charindex('rev5', [rev_code])= 0
  

检查rev_code列大小。

正如@Zohar Peled所说,存储逗号分隔值是一个坏主意。

Is storing a delimited list in a database column really that bad?

答案 3 :(得分:0)

试试这个,如果rev5已经rev3并且rev5已经不存在,则会UPDATE tbl SET rev_code = rev_code + ',rev5' WHERE rev_code NOT LIKE '%rev5%' AND rev_code LIKE '%rev3%' 为rev_code。

{{1}}

答案 4 :(得分:0)

哎呀......你的数据库设计有问题,所以我首先建议你创建一个额外的一对多表来存储字段:originalTableRecordId | rev_code

然后您会在该表中找到具有特定rev_code值的所有记录,并将新记录添加到符合条件的记录中。

如果您无法更改数据库结构,那么您必须使用" WHERE rev_code,例如'%rev3%' " (这将非常慢)或全文搜索(这是一个巨大的矫枉过正)

答案 5 :(得分:0)

怎么样:

UPDATE table 
SET rev_code = rev_code+',rev5' 
WHERE rev_code LIKE '%rev3%' (OR RIGHT(rev_code,4) = 'rev3')