Jak wyjaśnił Aaron, nie możesz używać dynamicznego sql w UDF, ale mogę wymyślić sposób na obejście tego, po prostu umieść wszystkie twoje definicje funkcji w procedurze sklepowej, a wyniki zwrócone z zapisanego proc można uzyskać w tabeli tymczasowej, coś takiego
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
Następnie możesz umieścić zwrócony zestaw wyników w tabeli tymczasowej, wykonując następujące czynności
CREATE TABLE #TempTable (Col1, Col2.....)
INSERT INTO #TempTable
EXEC usp_GetProviderIds @DoctorId