在SQL Server中使用逗号分隔值更新列

时间:2013-10-25 12:24:18

标签: sql-server

我在SQL Server中有两个表:

表1

ID  SkillSetRequired                 SkillDesc
1   100-1,101-1,102-2,103-3          null
2   100-4,105-2                      null
3   100-1,102-2,104-2                null  
4   100-5,102-2                      null   
5   105-1                            null 

表2

ID    SkillName
100   .Net
101   Java
102   JQuery
103   Sql
104   PHP
105   C

我需要使用SkillNames更新SkillDesc的{​​{1}}列。例如,在第一行中,我需要将skilldesc更新为Table1

如何在不使用游标的情况下执行此操作?

我从以下查询中获取单个记录的字符串结果。但我需要更新所有行。

'.Net,Java,Jquery,SQL'

3 个答案:

答案 0 :(得分:1)

首先,你是如何将100-1,101-1,102-2,103-3插入表中的?

在添加上述内容时执行以下maping。 使用像

这样的Case语句
Case 
when @Skillset = '100' THEN @desc = .Net
when @Skillset = '101' THEN @desc = Java
....
END
与其他技能组合相同。

然后在为每个id插入表格时添加技能组并使用@Desc进行更新

答案 1 :(得分:1)

你是如何管理添加100-1,101-1,102-2,103-3的。这不是添加...的正确方法。

答案 2 :(得分:0)

我认为光标是最佳选择,即使它需要时间来执行。

     SELECT ID,SkillSetRequired 
     FROM #Table1
     OPEN @CurSkillUpdate
     FETCH NEXT
     FROM @CurSkillUpdate INTO @id,@skills
     WHILE @@FETCH_STATUS = 0
     BEGIN
        SET @result = ''            
        SELECT @result = @result + ltrim(rtrim(SkillName)) + ',' from  #Table2 where id in(
        select SUBSTRING(items, 0 + 1, CHARINDEX('-', items, 1) - 0 - 1)  from split(@skills,','))          
        update #Table1 set SkillDesc=@result where ID=   @id
     FETCH NEXT
     FROM @CurSkillUpdate INTO  @id,@skills
     END