यहाँ मेरे पास सबसे अधिक प्रदर्शन करने वाला कार्य है:
CREATE FUNCTION [Resource].[udf_SplitByXml]
(@Data NVARCHAR(MAX), @Delimiter NVARCHAR(5))
RETURNS @Table TABLE
( Data NVARCHAR(MAX)
, SequentialOrder INT IDENTITY(1, 1))
AS
BEGIN
DECLARE @TextXml XML;
SELECT @TextXml = CAST('<d>' + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@Data, '&', '&'), '<', '<'), '>', '>'), '"', '"'), '''', '''), @Delimiter, '</d><d>') + '</d>' AS XML);
INSERT INTO @Table (Data)
SELECT Data = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(T.split.value('.', 'nvarchar(max)'))), '&', '&'), '<', '<'), '>', '>'), '"', '"'), ''', '''')
FROM @TextXml.nodes('/d') T(Split)
RETURN
END
यहां नमूना कॉल हैं जिनका उपयोग आप परिणामों का परीक्षण करने के लिए कर सकते हैं:
SELECT * FROM Resource.udf_SplitByXml('yes, no, maybe, so', ',');
SELECT * FROM Resource.udf_SplitByXml('who|what|where|when|why|how|Uh, I don''t know!', '|');
SELECT * FROM Resource.udf_SplitByXml('Government, Education, Non-profit|Energy & Power|Yes|No', '|');
SELECT * FROM Resource.udf_SplitByXml('Energy & Power|Some<Thing>Wicked''This"Way Comes', '|');
एक अन्य विकल्प एडम मचानिक के कोड के आधार पर सीएलआर समाधान का प्रयास करना है जो एक प्रदर्शन परीक्षण का विजेता था इस ब्लॉग में ।