यदि आप मानों के साथ काम करने जा रहे हैं तो एक विधि जिस पर आप विचार कर सकते हैं, वह यह है कि उन्हें पहले एक अस्थायी तालिका में लिखा जाए। फिर आप सामान्य की तरह ही इसमें शामिल होते हैं।
इस तरह, आप केवल एक बार पार्स कर रहे हैं।
'स्प्लिट' यूडीएफ में से एक का उपयोग करना सबसे आसान है, लेकिन इतने सारे लोगों ने उन लोगों के उदाहरण पोस्ट किए हैं, मुझे लगा कि मैं एक अलग मार्ग पर जाऊंगा;)
यह उदाहरण आपके (#tmpDept) में शामिल होने और आपके द्वारा पास किए गए विभाग आईडी के साथ भरने के लिए एक अस्थायी तालिका बनाएगा। मैं मान रहा हूं कि आप उन्हें अल्पविराम से अलग कर रहे हैं, लेकिन आप निश्चित रूप से बदल सकते हैं - जो आप चाहते हैं।
IF OBJECT_ID('tempdb..#tmpDept', 'U') IS NOT NULL
BEGIN
DROP TABLE #tmpDept
END
SET @DepartmentIDs=REPLACE(@DepartmentIDs,' ','')
CREATE TABLE #tmpDept (DeptID INT)
DECLARE @DeptID INT
IF IsNumeric(@DepartmentIDs)=1
BEGIN
SET @DeptID=@DepartmentIDs
INSERT INTO #tmpDept (DeptID) SELECT @DeptID
END
ELSE
BEGIN
WHILE CHARINDEX(',',@DepartmentIDs)>0
BEGIN
SET @DeptID=LEFT(@DepartmentIDs,CHARINDEX(',',@DepartmentIDs)-1)
SET @DepartmentIDs=RIGHT(@DepartmentIDs,LEN(@DepartmentIDs)-CHARINDEX(',',@DepartmentIDs))
INSERT INTO #tmpDept (DeptID) SELECT @DeptID
END
END
यह आपको एक विभाग की आईडी, कई आईडी के बीच में कॉमा के साथ, या यहां तक कि कई आईडी के कॉमा और उनके बीच रिक्त स्थान से गुजरने की अनुमति देगा।
तो अगर आपने कुछ ऐसा किया है:
SELECT Dept.Name
FROM Departments
JOIN #tmpDept ON Departments.DepartmentID=#tmpDept.DeptID
ORDER BY Dept.Name
आपको उन सभी डिपार्टमेंट आईडी के नाम दिखाई देंगे, जिन्हें आपने पास किया था ...
फिर से, अस्थायी तालिका को आबाद करने के लिए एक फ़ंक्शन का उपयोग करके इसे सरल बनाया जा सकता है ... मैंने मुख्य रूप से इसे बिना किसी ऊब को मारने के लिए एक के बिना किया था :-P
- केविन फेयरचाइल्ड