Seperti yang telah dijelaskan Aaron, Anda tidak dapat menggunakan sql dinamis di UDF tetapi saya dapat memikirkan jalan keluarnya, cukup letakkan semua definisi fungsi Anda dalam prosedur toko dan Anda bisa mendapatkan hasil yang dikembalikan dari proc yang disimpan ke dalam tabel temp seperti ini
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
Dan kemudian Anda bisa mendapatkan hasil yang dikembalikan diatur ke tabel temp dengan melakukan hal berikut
CREATE TABLE #TempTable (Col1, Col2.....)
INSERT INTO #TempTable
EXEC usp_GetProviderIds @DoctorId