ठीक है, मुझे आपको पहले कुछ बैक ग्राउंड देने की जरूरत है।
जब आप SSRS पैरामीटर को एकाधिक मानों का चयन करने की अनुमति देते हैं, तो एकाधिक मानों का चयन एक स्ट्रिंग के रूप में मान का अल्पविराम सीमांकित स्ट्रिंग बनाता है
'value1,value2,value3'
IN
. का उपयोग करके स्ट्रिंग में मानों की जांच करने के लिए ऑपरेटर हमें कुछ इस तरह अल्पविराम से जुड़े तार की जरूरत है ....
'value1','value2','value3'
आपकी प्रक्रिया
अब आपकी खरीद में जब आप स्पष्ट रूप से मान सम्मिलित करते हैं तो यह आपकी तालिका में एकाधिक मान सम्मिलित करता है।
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
और यह आपको अपेक्षित परिणाम वापस देता है जैसे कि जब आपकी प्रक्रिया के अंदर आप एक कथन निष्पादित करते हैं जैसे
SELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
दूसरी ओर जब आप SSRS रिपोर्ट पैरामीटर का उपयोग करके तालिका में सम्मिलित करने का प्रयास करते हैं तो आप तालिका में
जैसे मान सम्मिलित करते हैं INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
समाधान
TVP
बनाना इस स्थिति में वास्तव में मदद नहीं करता है, मैं जो करता हूं वह dbo.Split()
. का उपयोग करता है मेरी प्रक्रिया के अंदर कार्य करें।
आप स्प्लिट फ़ंक्शन के लिए ऑनलाइन कई परिभाषाएँ पा सकते हैं, कुछ अच्छे लोगों के लिए यहाँ देखें Split Function equivalent in tsql?
एक बार जब आप इस स्प्लिट फ़ंक्शन को बना लेते हैं तो बस इस फ़ंक्शन का उपयोग अपनी प्रक्रिया परिभाषा के अंदर करें, फिर आपको तालिका मूल्यवान पैरामीटर की भी आवश्यकता नहीं होती है।
कुछ इस तरह...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)