sql >> Database >  >> RDS >> Sqlserver

SQL Server Dynamic Pivot in UDF die tabel retourneert

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



  1. Bron-replica-replicatie configureren in MySQL

  2. Hoe zorg ik ervoor dat Java &Postgres-enums samenwerken voor update?

  3. Kan geen verbinding maken met MySQL op live met Laravel 5

  4. SQL:Voordelen van een ENUM versus een één-op-veel relatie?