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

एसएसआरएस में संग्रहित प्रक्रिया में एकाधिक मान पैरामीटर पास करना

ठीक है, मुझे आपको पहले कुछ बैक ग्राउंड देने की जरूरत है।

जब आप 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, ',')
                       ) 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तैयार पैराम्स LIKE स्टेटमेंट SQLSRV के साथ काम नहीं कर रहा है

  2. SQL सर्वर में एस्केप कैरेक्टर

  3. SSIS OLEDB गंतव्य में अद्यतन पंक्तियाँ

  4. लिंक से SQL - अद्यतन करने में विफल

  5. SQL सर्वर में डेटाटाइम कॉलम की आवश्यकता है जो रिकॉर्ड संशोधित होने पर स्वचालित रूप से अपडेट हो जाता है