[MS SQL] Dynamiczna tabela (przez procedurę czy funkcję tabelaryczną)

0

Witam,

Mam taką tabelkę:


create table #tmp
(
resultid int
,field nvarchar(max)
,num int
,fieldvalue nvarchar(max)
)


insert into #tmp 
select 1,'Zdjecie', 1,'link'
union
select 1,'Zdjecie', 2,'link'
union
select 1,'Zdjecie', 3,'link'
union
select 2,'ZdjecieDokumentu', 1,'link'
union
select 3,'ZdjecieDokumentu', 1,'link'


select * from #tmp

drop table #tmp

Napisałem sobie procedurę, która przetwarza ją transponuje(pivotuje) ją do takiej formy:

resultid Zdjecie_1 Zdjecie_2 Zdjecie_3 ZdjecieDokumentu_1 ZdjecieDokumentu_2
1 LINK LINK LINK
2 LINK
3 LINK

Generuję ją w ten sposób:
exec [dbo].[udsp_Photos] @cols ='Zdjecie, ZdjecieDokumentu'

gdzie parametrami są pola, które mają być zamieniane dynamicznie na kolumny z dopiskiem liczby porządkowej ( ta liczba może być dowolna dla każdego pola).

I to działa ok. Problem w tym, że taką wynikową tabelę chciałbym potem połączyć z inną tabelą po polu z 'resultid'. Za pomocą procedury chyba nie jestem w stanie tego zrobić. Mógłbym to wrzucić to tymczasowj tabelki, ale wcześniej musiałbym mieć zdefiniowaną strukturę chyba. Próbowałem też za pomocą nie procedur, a funkcji tabelarycznych.
Może ktoś ma lepszy pomysł?

0

Odpowiedź na Twoje pytanie już jest gotowa: How can I join on a stored procedure?. Mogę ją tylko przetłumaczyć i streścić:

Utworzenie tabeli tymczasowej to jedyna opcja (odpowiedź usera devio). Inne to zmiana procedury na funkcję lub widok.

1
SELECT *
FROM   OPENQUERY ( [server_sql] ,
                   'EXEC [dbo].[udsp_Photos] @cols =''''Zdjecie, ZdjecieDokumentu''''' ) AS result
       INNER JOIN inna_tabela i ON result.resultid = i.resultid;

```

1 użytkowników online, w tym zalogowanych: 0, gości: 1