在SQL Server中更新时,在列而不是列名下获取值

时间:2019-05-14 21:43:42

标签: sql sql-server sql-server-2008

我有#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',但我需要该列下的实际值。我能做什么?谢谢!

EDIT1:

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不能正常工作。标题停留而变为其实际值。

EDIT2:

set CombinedText = c.[t2.Title+''_Text'']也不起作用

1 个答案:

答案 0 :(得分:0)

这是一个非常糟糕的数据设计。您应该将“文本”列放在单独的行中,而不是在列中。

考虑到这一点,您可以这样做:

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表达式。