C# 在SQL Server中使用逗号分隔的值从现有值更新列
在SQL Server中使用逗号分隔的值从现有值更新列C# 在SQL Server中使用逗号分隔的值从现有值更新列,c#,sql,asp.net,sql-server,C#,Sql,Asp.net,Sql Server,在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,
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
停止将逗号分隔的值存储在违反第一个标准格式的列中。考虑更改数据库设计< /P> 在最坏的情况下,使用此更新来获得结果
UPDATE Yourtable
SET [rev_code] = [rev_code] + ',rev5'
WHERE Charindex('rev3', [rev_code]) > 0
您的最佳选择是规范化您的数据库:
去掉
rev_code
列,将其转换为一个新表,并使用外键约束链接到当前表
如果这是不可能的,您可以这样做:
UPDATE tbl
SET rev_code = rev_code + ',rev5'
WHERE ','+ rev_code + ',' LIKE '%,rev3,%'
AND ','+ rev_code + ',' NOT LIKE '%,rev5,%'
尝试此操作,如果存在
rev3
且rev5
已不存在,则此操作将rev5
用于revu代码
UPDATE tbl
SET rev_code = rev_code + ',rev5'
WHERE rev_code NOT LIKE '%rev5%' AND rev_code LIKE '%rev3%'
试试这个
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
检查版本代码列大小
正如@Zohar-Peled所说,存储逗号分隔的值是个坏主意
哎哟……您的数据库设计有误,所以我首先建议您创建额外的一对多表,用于存储字段:originalTableRecordId | rev|u code 然后在该表中找到所有具有特定rev_代码值的记录,并将新记录添加到符合条件的记录中 如果您无法更改数据库结构,则必须使用“WHERE rev_code like“%rev3%”(这将非常慢)或全文搜索(这是一个巨大的过度使用)如何:
UPDATE table
SET rev_code = rev_code+',rev5'
WHERE rev_code LIKE '%rev3%' (OR RIGHT(rev_code,4) = 'rev3')
如果rev_代码以rev3开头,则表示like语句失败。@PonmaniChinnaswamy-否,他在LHS和rev3中都添加了前导逗号RHS@PonmaniChinnaswamy通过在like的两侧添加前导和尾随逗号,我可以确保只有正确的值才会通过。如果这是一个逗号分隔数字字符串,您将搜索
2
,如果不使用该技巧,您将在包含2
的任何成员上获得误报-例如21
,3245
等等。谢谢@ZoharPeled。rev_代码中的rev5意味着它将再次添加rev5?消息8152,级别16,状态13,第1行字符串或二进制数据将被截断。声明已终止。错误?@ZoharPeled-Yes:)消息8152,级别16,状态13,第1行字符串或二进制数据将被截断。声明已终止。错误?@mailtoasp-将截断rev_code
columnsg 8152第16级第13状态第1行字符串或二进制数据的长度。声明已终止。错误?错误??Msg 8152,级别16,状态13,第1行字符串或二进制数据将被截断。语句已终止。@mailtoasp,请检查“rev_code”列的大小。