Linket, som Kangkan gav, viser dig, hvordan du kan gøre dette, hvis du havde kendt kolonnenavnene på forhånd. Vi går efter den samme logik, bortset fra at bruge dynamisk SQL til at bygge sætningen. Der er 2 dele til hvert felt, som du skal inkludere, feltet i select-sætningen og en passende join for at få værdien...så vi bliver nødt til at bygge sætningen i to dele
Først erklærer 3 variabler for at bygge dette...Jeg vil gå med @select, @join og @sql for dette eksempel. Giv variablerne startværdierne
set @select = 'select user_id,'
set @join = 'from table t'
erklær og indlæs nu en markør med de forskellige værdier i feltet table.key. Jeg vil bruge @field, da variablen bliver udfyldt med det distinkte table.key-felt. Gå derefter igennem det og bygger de to variable:
set @select = @select + ', ' + @field + '.value as '[email protected]+'
set @join = @join + ' left join table ' + @field + 'on '[email protected]+'.key = t.key and and '[email protected]+'.user_id = t.user_id
(sammenføjningen er designet til at bruge værdien i @field som tabellens alias)
gå gennem din markør ved at bygge @select og @join ud. I slutningen af løkken:
set @sql = @select + @join + 'where clause if you want'
exec @sql
Dynamisk SQL bygget som dette kan være en absolut smerte at fejlfinde (og rette op på) og åbne op for sikkerhedsproblemer...men det er omtrent den eneste måde, jeg kan se dette opnået. Hold øje med størrelsesbegrænsninger på dine variabler....hvis du har for mange forskellige nøgler der, vokser variablerne for store. Beklager, jeg kan ikke være mere præcis med pseudo'en på dette...du vil opdage, at det er omhyggeligt at bygge dynamisk sql i sql.