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

संग्रहीत कार्यविधि में डेटा की एकाधिक पंक्तियों को पास करना

आप एक स्ट्रिंग से कई मानों को आसानी से विभाजित कर सकते हैं। मान लें कि आप "कॉलम" को अलग करने के लिए अल्पविराम का उपयोग करके और "पंक्तियों" को अलग करने के लिए अर्ध-कॉलन का उपयोग करके स्ट्रिंग को इस तरह बंडल कर सकते हैं:

foo, 20120101, 26; bar, 20120612, 32

(यह मानता है कि कोलन और सेमी-कोलन डेटा में स्वाभाविक रूप से प्रकट नहीं हो सकते हैं; यदि वे कर सकते हैं, तो आपको अन्य सीमांकक चुनने की आवश्यकता होगी।)

आप इस तरह एक विभाजित दिनचर्या बना सकते हैं, जिसमें एक आउटपुट कॉलम शामिल है जो आपको मूल स्ट्रिंग में दिखाई देने वाले क्रम को निर्धारित करने की अनुमति देता है:

CREATE FUNCTION dbo.SplitStrings
(
    @List       NVARCHAR(MAX),
    @Delimiter  NVARCHAR(255)
)
RETURNS TABLE
AS
    RETURN (SELECT Number = ROW_NUMBER() OVER (ORDER BY Number),
        Item FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number, 
        CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)))
    FROM (SELECT ROW_NUMBER() OVER (ORDER BY [object_id])
        FROM sys.all_objects) AS n(Number)
    WHERE Number <= CONVERT(INT, LEN(@List))
        AND SUBSTRING(@Delimiter + @List, Number, 1) = @Delimiter
    ) AS y);
GO

फिर आप इसे इस तरह से क्वेरी कर सकते हैं (सादगी और चित्रण के लिए मैं केवल 3 गुणों को संभाल रहा हूं लेकिन आप इसे 11 या n के लिए एक्सट्रपलेशन कर सकते हैं):

DECLARE @x NVARCHAR(MAX); -- a parameter to your stored procedure

SET @x = N'foo, 20120101, 26; bar, 20120612, 32';

;WITH x AS 
(
    SELECT ID = s.Number, InnerID = y.Number, y.Item 
    -- parameter and "row" delimiter here:
    FROM dbo.SplitStrings(@x, ';') AS s
    -- output and "column" delimiter here:
    CROSS APPLY dbo.SplitStrings(s.Item, ',') AS y
)
SELECT 
    prop1 = x.Item, 
    prop2 = x2.Item, 
    prop3 = x3.Item
FROM x 
INNER JOIN x AS x2 
ON x.InnerID = x2.InnerID - 1
AND x.ID = x2.ID
INNER JOIN x AS x3
ON x2.InnerID = x3.InnerID - 1
AND x2.ID = x3.ID
WHERE x.InnerID = 1
ORDER BY x.ID;

परिणाम:

prop1   prop2     prop3
------  --------  -------
foo     20120101  26
bar     20120612  32


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पता करें कि क्या ऑब्जेक्ट OBJECTPROPERTY () के साथ SQL सर्वर में उपयोगकर्ता-परिभाषित तालिका है

  2. SQL सर्वर केस स्टेटमेंट में कुल विकल्प

  3. SQL सर्वर डेटाबेस की प्रतिलिपि बनाने पर प्रश्न

  4. स्क्रिप्ट और संग्रहीत कार्यविधियों को तोड़े बिना किसी स्तंभ का नाम बदलना

  5. सबसे कठिन प्रश्नों पर सहायता के लिए सर्वश्रेष्ठ SQL सर्वर प्रदर्शन फ़ोरम