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

मैं SQL सर्वर में विभाजित फ़ंक्शन को इनलाइन तालिका मूल्यवान udf में कैसे परिवर्तित कर सकता हूं?

समस्या आपके विभाजन समारोह के साथ है। यह एक आरबीएआर फ़ैशन। आपको सेट-आधारित स्प्लिटर का उपयोग करना चाहिए। यह रहा DelimitedSplit8k जेफ मोडन द्वारा, जो सबसे तेज़ स्प्लिटर में से एक है:

CREATE FUNCTION [dbo].[DelimitedSplit8K](
    @pString VARCHAR(8000), @pDelimiter CHAR(1)
)
RETURNS TABLE WITH SCHEMABINDING AS
RETURN
WITH E1(N) AS (
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
)
,E2(N) AS (SELECT 1 FROM E1 a, E1 b)
,E4(N) AS (SELECT 1 FROM E2 a, E2 b)
,cteTally(N) AS(
    SELECT TOP (ISNULL(DATALENGTH(@pString), 0)) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
)
,cteStart(N1) AS(
    SELECT 1 UNION ALL 
    SELECT t.N+1 FROM cteTally t WHERE SUBSTRING(@pString, t.N, 1) = @pDelimiter
),
cteLen(N1, L1) AS(
SELECT 
    s.N1,
    ISNULL(NULLIF(CHARINDEX(@pDelimiter, @pString, s.N1),0) - s.N1, 8000)
FROM cteStart s
)
SELECT 
    ItemNumber = ROW_NUMBER() OVER(ORDER BY l.N1),
    Item       = SUBSTRING(@pString, l.N1, l.L1)
FROM cteLen l

नोट:अपडेट किए गए फ़ंक्शन के लिए लेख देखना सुनिश्चित करें

अधिक विभाजित कार्यों के लिए, सर आरोन बर्ट्रेंड के इन लेखों को पढ़ें:




  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) में डेटाबेस मेल प्रोफ़ाइल को अपडेट करते समय "प्रोफ़ाइल नाम मान्य नहीं है" को कैसे ठीक करें

  2. SQL सर्वर में वर्चर (अधिकतम) के लिए NULL मान वापस क्यों नहीं कर रहा है?

  3. टेबल स्कैन और क्लस्टर्ड इंडेक्स स्कैन में क्या अंतर है?

  4. उपयोगकर्ता द्वारा कॉन्फ़िगर किए गए समय अंतराल में प्रतिदिन SQL कार्य शेड्यूल करें

  5. SQL सर्वर (T-SQL) में वर्तमान सत्र की भाषा प्राप्त करने के 3 तरीके