2013-10-25 8 views
0

У меня есть 2 таблицы в SQL Server:столбец Обновление с помощью разделенных запятыми значений в SQL Server

TABLE1

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 

TABLE2

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

мне нужно обновить SkillDesc столбец Table1 с именами Skill. Например, в первой строке мне нужно обновить skilldesc как '.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 
+1

Вы не должны хранить такие значения. Является ли исправление (то есть правильно нормализовать его) вашей моделью данных? –

+0

Нет ... Это старый стол. Я не смогу изменить этот стол, потому что он уже используется :( – san

+0

- это одна проблема или постоянная проблема? – RoughPlace

ответ

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 [email protected] where ID= @id 
    FETCH NEXT 
    FROM @CurSkillUpdate INTO @id,@skills 
    END 
1

Во-первых, как вы ввели 100-1,101-1,102-2,103-3 в таблицу?

Сделайте следующее скрининг, добавив выше. Используйте саз как

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

таким же образом для других наборов навыков.

Затем при вставке в таблицу для каждого ID добавить и набор навыков использовать @Desc для который обновляет

+0

Значения добавляются заданием, в котором у меня нет доступа. В таблице содержится больше данных, и мне нужно сделать обновление для всех записей ... Это занимает много времени когда я использовал курсор – san

+2

Это было бы больше работы и боль .. было много времени. Но все же у вас есть решение для этого: извлеките столбец skillset в tmp tbale и присоединитесь к таблице-2 с ней, где вы получите desc. разделите каждый столбец и сопоставьте desc с оператором CASE и соедините их запятой. Я знаю, что это слишком запутанно .. привет. Если вы сделаете это шаг за шагом, вы можете это сделать. – user2919277

+0

ya ... im пытается в этом путь на ly .. – san

1

Как у МЕНЕДЖЕРОВ добавления 100-1,101-1,102-2,103-3. Это не правильный способ добавить ...

+0

Ya ... Но я не могу изменить это .... таблица старая и которая hv больше данных и уже используется :( – san

+2

только путь - использовать временную таблицу для этого. Используйте таблицу temp, разделяющую, разделяемую и добавляющую соответствующие desc для каждого, используя case case. Поместите их все в одну таблицу tmp. Затем, используя эту таблицу tmp, добавьте результаты в основную tbale на основе ID. – Ranjitha

+1

Спасибо Ranjitha ... я пытаюсь использовать временные таблицы – san

Смежные вопросы