Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server Dynamic Pivot di UDF yang mengembalikan tabel

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengembang Sql 2008 ke Sql Azure Migration

  2. Seberapa penting urutan kolom dalam indeks?

  3. T-SQL Subquery Max (Tanggal) dan Bergabung

  4. SQL Server 2008 - urutkan berdasarkan string dengan angka secara numerik

  5. Properti dependen dalam ReferentialConstraint dipetakan ke kolom yang dihasilkan toko