Odkaz, který poskytl Kangkan, vám ukáže, jak toho dosáhnout, pokud jste předem znali názvy sloupců. Jdeme na stejnou logiku, s výjimkou použití dynamického SQL k vytvoření příkazu. Každé pole má 2 části, které musíte zahrnout, pole v příkazu select a vhodné spojení pro získání hodnoty...takže budeme muset příkaz sestavit ze dvou částí
Nejprve deklarujte 3 proměnné, abyste to sestavili...pro tento příklad použiji @select, @join a @sql. Dejte proměnným počáteční hodnoty
set @select = 'select user_id,'
set @join = 'from table t'
nyní deklarujte a načtěte kurzor s odlišnými hodnotami v poli table.key. Budu používat @field, když se proměnná vyplní odlišným polem table.key. Pak to projděte a vytvořte dvě proměnné:
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
(spojení je navrženo tak, aby používala hodnotu v @field jako alias tabulky)
procházejte kurzorem pomocí @select a @join. Na konci cyklu:
set @sql = @select + @join + 'where clause if you want'
exec @sql
Dynamické SQL vytvořené takto může být absolutní bolestí řešit problémy (a najít správné řešení) a otevřít bezpečnostní problémy... ale je to asi jediný způsob, jak toho dosáhnout. Dávejte pozor na omezení velikosti proměnných... pokud tam máte příliš mnoho různých klíčů, proměnné se příliš zvětšují. Omlouvám se, že nemohu být přesnější s pseudonymem... zjistíte, že vytváření dynamického SQL v SQL je pracné.