Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SQL Server中使用逗号分隔的值从现有值更新列_C#_Sql_Asp.net_Sql Server - Fatal编程技术网

C# 在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,

在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

停止将逗号分隔的值存储在违反第一个标准格式的列中。考虑更改数据库设计< /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”列的大小。