Получить значение под столбцом вместо имени столбца при обновлении в SQL Server - PullRequest
0 голосов
/ 15 мая 2019

У меня есть #Temp2, в котором есть столбцы:

Math_Text, Science_Text, Physics_Text, Title

Мне нужно выполнить запрос ниже:

update t
set CombinedText = t2.Title + '_Text'
from #Temp1 t
inner #Temp2 t2 on t2.Id = t.Id

Когда я, например, запускаю его, я вижу CombinedText =«Math_Text», но мне нужно фактическое значение в этом столбце.Что я могу сделать?Спасибо!

РЕДАКТИРОВАТЬ1:

declare @sql nvarchar(max) = 'update t
    set CombinedText = t2.Title + ''_Text''
    from #Temp1 t
    inner #Temp2 t2 on t2.Id = t.Id
'
exec sp_executesql @sql 

также не работает, t2.Title остается вместо того, чтобы превратиться в его фактическое значение.

РЕДАКТИРОВАНИЕ2:

set CombinedText = c.[t2.Title+''_Text''] тоже не работал

1 Ответ

0 голосов
/ 15 мая 2019

Это очень плохой дизайн данных. Ваши «текстовые» столбцы должны быть в отдельных строках, а не в столбцах.

Имея это в виду, вы можете сделать:

update t
    set CombinedText = v.txt
    from #Temp1 t inner join
         #Temp2 t2
         on t2.Id = t.Id cross apply
         (select v.*
          from (values ('Math', Math_Text), ('Science', Science_Text), ('Physics', Physics_Text)
               ) v(title, txt)
          where v.title = t2.title
         );

Вы также можете использовать гигантское выражение case.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...