Zoals Aaron heeft uitgelegd, kun je dynamische sql niet gebruiken in UDF, maar ik kan een manier bedenken om gewoon al je functiedefinities in een winkelprocedure te plaatsen en je kunt de resultaten van de opgeslagen procedure in een tijdelijke tabel krijgen, zoiets als dit
CREATE PROC usp_GetProviderIds
@DoctorId INT
AS
BEGIN
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@id as int = 1;
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(QUALIFIER)
FROM PROVIDERIDS
LEFT OUTER JOIN TEMPDOCS on TEMPDOCS.DOCID = PROVIDERIDS.PARENTID
WHERE DOCID = @id
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT DOCID, NAME, ' + @cols + ' from
(
select TEMPDOCS.DOCID, TEMPDOCS.NAME, PROVIDERIDS.QUALIFIER, PROVIDERIDS.IDENTIFIER FROM TEMPDOCS
LEFT OUTER JOIN PROVIDERIDS ON PROVIDERIDS.PARENTID=TEMPDOCS.DOCID
WHERE TEMPDOCS.DOCID = ' + CAST(@ID AS VARCHAR(30)) + '
) x
pivot
(
MAX(IDENTIFIER)
FOR QUALIFIER IN (' + @cols + ')
) p '
EXECUTE sp_Executesql @query
END
En dan kunt u het geretourneerde resultaat in een tijdelijke tabel krijgen door het volgende te doen
CREATE TABLE #TempTable (Col1, Col2.....)
INSERT INTO #TempTable
EXEC usp_GetProviderIds @DoctorId