You can do same this way also :-
Set Nocount On;
Declare @LanguageId Int
,@Sql1 Varchar(Max)
,@SqlCols Varchar(Max)
,@SqlUpdates Varchar(Max)
If Object_Id('tempdb.dbo.#WidgetLanguage') Is Not Null Drop Table #WidgetLanguage;
If Object_Id('tempdb.dbo.#Widgets') Is Not Null Drop Table #Widgets;
Create Table #WidgetLanguage
(
WidgetName Varchar(100)
,LanguageId Int
,Text Varchar(100)
)
Create Table #Widgets
(
WidgetName Varchar(100)
)
Insert Into #WidgetLanguage(WidgetName,LanguageId,Text) Values
('lbNext',1031,'weiter')
,('lbNext',1033,'next')
,('btConnect',1031,'verbinden')
,('btConnect',1033,'connect')
Select @LanguageId = Min(wl.LanguageId)
,@Sql1 = ''
,@SqlCols = ''
,@SqlUpdates = ''
From #WidgetLanguage As wl With (Nolock)
Insert Into #Widgets(WidgetName)
Select Distinct
wl.WidgetName
From #WidgetLanguage As wl With (Nolock)
;With AllLanguages As
(
Select @LanguageId As LanguageId
Union All
Select Top 1 wl.LanguageId
From (
Select Distinct
LanguageId
From #WidgetLanguage As wl With (Nolock)
) As wl
Where wl.LanguageId > @LanguageId
)
Select @Sql1 = @Sql1 + '[' + Cast(al.LanguageId As Varchar(20)) + '],'
,@SqlCols = @SqlCols + ',[' + Cast(al.LanguageId As Varchar(20)) + '] Varchar(100)'
,@SqlUpdates = @SqlUpdates + ',w.[' + Cast(al.LanguageId As Varchar(20)) + '] = Isnull(t.[' + Cast(al.LanguageId As Varchar(20)) + '],'''')'
From AllLanguages As al With (Nolock)
Select @Sql1 = Substring(@Sql1, 0, Len(@Sql1))
,@SqlCols = 'Alter Table #Widgets Add ' + Substring(@SqlCols, 2, (Len(@SqlCols) + 1))
,@SqlUpdates = Substring(@SqlUpdates, 2, (Len(@SqlUpdates) + 1))
Exec (@SqlCols)
Select @Sql1 = 'Update w Set ' + @SqlUpdates +
'From #Widgets As w ' +
'Join ' +
'(' +
'Select WidgetName,' + @Sql1 + ' From ' +
'(' +
'Select wl.WidgetName,wl.Text,wl.LanguageId '+
'From #WidgetLanguage As wl With (Nolock) '+
') As wl Pivot(Max(wl.Text) For wl.LanguageId In (' + @Sql1 + ')) t' +
') As t On w.WidgetName = t.WidgetName '
----Print (@Sql1)
Exec (@Sql1)
Select *
From #Widgets As wl With (Nolock)