0

我在 SQL Server 中有 2 个表:

表格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列。Table1例如在第一行我需要更新技能描述为'.Net,Java,Jquery,SQL'

在不使用游标的情况下如何做到这一点?

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

declare @result varchar(max)

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('100-1,101-1,102-2,103-3',','))
                         select @result
4

3 回答 3

1

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

在添加上面的同时做下面的映射。使用 Case 语句,例如

Case 
when @Skillset = '100' THEN @desc = .Net
when @Skillset = '101' THEN @desc = Java
....
END

其他技能组的方法相同。

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

于 2013-10-25T12:45:25.890 回答
1

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

于 2013-10-25T12:49:54.113 回答
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
于 2013-10-28T06:03:28.753 回答