Link, który podał Kangkan, pokaże Ci, jak to zrobić, gdybyś znał wcześniej nazwy kolumn. Idziemy do tej samej logiki, z wyjątkiem użycia dynamicznego SQL do zbudowania instrukcji. Każde pole składa się z 2 części, które musisz uwzględnić, pole w instrukcji select i odpowiednie sprzężenie, aby uzyskać wartość... więc musimy utworzyć instrukcję z dwóch części
Najpierw zadeklaruj 3 zmienne, aby to zbudować... W tym przykładzie użyję @select, @join i @sql. Nadaj zmiennym wartości początkowe
set @select = 'select user_id,'
set @join = 'from table t'
teraz zadeklaruj i załaduj kursor z odrębnymi wartościami w polu table.key. Użyję @field, ponieważ zmienna zostanie wypełniona odrębnym polem table.key. Następnie przejdź przez nią, tworząc dwie zmienne:
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
(połączenie jest zaprojektowane tak, aby używać wartości w @field jako aliasu tabeli)
zapętlaj kursor, budując @select i @join. Na końcu pętli:
set @sql = @select + @join + 'where clause if you want'
exec @sql
Dynamiczny SQL zbudowany w ten sposób może być absolutnym problemem przy rozwiązywaniu problemów (i rozwiązywaniu problemów) i otwieraniu problemów związanych z bezpieczeństwem… ale to jedyny sposób, w jaki mogę to osiągnąć. Zwróć uwagę na ograniczenia rozmiaru zmiennych… jeśli masz zbyt wiele odrębnych kluczy, zmienne stają się zbyt duże. Przepraszam, że nie mogę być bardziej dokładny z pseudonimem w tym temacie... Przekonasz się, że budowanie dynamicznego sql w sql jest żmudne.