Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server Dynamic Pivot в UDF, който връща таблица

Както Арън обясни, не можете да използвате динамичен sql в UDF, но мога да измисля начин просто да поставите цялата си дефиниция на функции в процедура за съхранение и можете да получите резултатите, върнати от съхранената процедура във временна таблица, нещо подобно

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

След това можете да получите върнатия набор от резултати във временна таблица, като направите следното

CREATE TABLE #TempTable (Col1, Col2.....)
INSERT INTO #TempTable
EXEC usp_GetProviderIds @DoctorId



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Групиране на общия брой активни потребители за всяка от предходните 8 седмици

  2. Как да зацикля и анализира xml параметър в съхранена процедура на sql сървър

  3. SQL SERVER 2008 ПОЛУЧАВА ПОСЛЕДНО ВМЪКНАТИ СТОЙНОСТИ

  4. ORDER BY в изглед на Sql Server 2008

  5. Намерете имената на параметрите на съхранена процедура