Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server Dynamic Pivot w UDF, który zwraca tabelę

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jeśli klucz obcy nie istnieje, dodaj ograniczenie klucza obcego (lub usuń ograniczenie klucza obcego, jeśli istnieje) bez użycia nazwy?

  2. Błąd podczas modyfikowania DAL, System.ArgumentException, Wpis z tym samym kluczem już istnieje

  3. Obsługa dialektu SQL 2008 dla NHibernate

  4. Dynamiczny SQL (przekazywanie nazwy tabeli jako parametru)

  5. Jak przenieść tabelę do schematu w T-SQL?