我在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'
答案 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