Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

UDF में SQL सर्वर डायनेमिक पिवट जो तालिका लौटाता है

जैसे हारून ने समझाया है कि आप यूडीएफ में गतिशील एसक्यूएल का उपयोग नहीं कर सकते हैं, लेकिन मैं अपने सभी कार्यों की परिभाषा को स्टोर प्रक्रिया में रखने के तरीके के बारे में सोच सकता हूं और आप संग्रहित प्रो से परिणाम को एक अस्थायी तालिका में वापस कर सकते हैं जैसे कुछ

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. SQL सर्वर (T-SQL) में किसी दिनांक से ISO सप्ताह संख्या लौटाएँ

  2. एसक्यूएल सर्वर रेगेक्स

  3. स्तंभ शीर्षलेख के लिए MSSQL गतिशील पिवट स्तंभ मान

  4. SQL सर्वर जॉब्स को एक SQL सर्वर इंस्टेंस से दूसरे में कैसे माइग्रेट करें

  5. अवरोही तिथि के अनुसार क्रम - माह, दिन और वर्ष