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

SQL पैरामीटर में स्ट्रिंग ऐरे को SQL में IN क्लॉज़ में कैसे पास करें?

परिचय :भले ही ओपी ने पहले ही एक उत्तर स्वीकार कर लिया हो, मैंने सोचा कि अपने अनुभव को साझा करना बेहतर होगा, क्योंकि मेरा मानना ​​है कि मैं जिस दृष्टिकोण को दिखाने जा रहा हूं, वह बेहतर है, जिसे स्वीकार किया गया है।

मुझे लगता है कि sql सर्वर डेटाबेस में Arrays पास करने का सबसे अच्छा तरीका user defined table type का उपयोग कर रहा है और सी# DataTable .आपके मामले में, चूंकि आप एक आयाम की एक स्ट्रिंग सरणी पास करना चाहते हैं, यह काफी आसान है:

सबसे पहले आपको अपने डेटाबेस में एक उपयोगकर्ता परिभाषित तालिका प्रकार बनाने की आवश्यकता है:

 CREATE TYPE dbo.StringArray As Table (
    StringItem varchar(50) -- you can use any length suited for your needs
)

फिर आपको अपने c# कोड में एक डेटाटेबल बनाना होगा:

DataTable dt = new DataTable();
dt.Columns.Add("StringItem", typeof(System.String));

फिर इस डेटा प्रकार को एक पैरामीटर के रूप में स्वीकार करने के लिए अपनी संग्रहीत कार्यविधि बदलें:

ALTER proc [dbo].[sp_Accessories]
(  
@Mode varchar(50)=null,
@id int=null,
@brand varchar(50)=null,
@department varchar(MAX)=null,
@season varchar(50)=null,
@groupname varchar(MAX)=null,
@styles varchar(50)=null,
@combo dbo.StringArray Readonly=null, -- NOTE THIS CHANGE
@combo_color nvarchar(max)=null,
)
as
if @Mode='getsizewise'
begin
select Sizes,SUM(Quantity) from tbl_SizeBreakup where ([email protected]) and
([email protected]) and ([email protected]) and ([email protected]) and ([email protected]) 
and ([email protected]) and (Total_Add_Qty='Total Quantity') 
and comboColumn in(select StringItem from @Combo) -- NOTE THIS CHANGE
Group By Sizes
end

फिर आपको अपने सी # कोड में स्ट्रिंग सरणी को डेटाटेबल में कनवर्ट करने की आवश्यकता है।

foreach (string s in YourStringArray) {
    string[] temp = {s};
    dt.Rows.Add(temp);
}

डेटाटेबल को संग्रहित प्रक्रिया में पैरामीटर के रूप में जोड़ें:

System.Data.SqlClient.SqlParameter sp = new Data.SqlClient.SqlParameter();
sp.SqlDbType = SqlDbType.Structured;
sp.Value = dt;
sp.ParameterName = "@Combo";
cmd.Parameters.Add(sp);

बनाएं और चलाएं।

एसक्यूएल उपयोगकर्ता परिभाषित फ़ंक्शन का उपयोग करके इस दृष्टिकोण में बेहतर प्रदर्शन होना चाहिए, और विभिन्न डेटा प्रकारों के लिए भी इसका उपयोग किया जा सकता है। यह इसका उपयोग करने के सर्वोत्तम कारणों में से एक है:एक परिदृश्य पर विचार करें जहां आपको तिथियों की एक सरणी पास करने की आवश्यकता है:सीएसवी दृष्टिकोण के लिए प्रत्येक स्ट्रिंग को एक तिथि में बदलने के लिए एसक्यूएल की आवश्यकता होती है, जबकि इस दृष्टिकोण के साथ आप बस तारीखों को पास कर सकते हैं, उन्हें स्ट्रिंग्स में परिवर्तित किए बिना और फिर तारीखों पर वापस जाएं। इसके अलावा, आप 2 आयाम सरणी या शब्दकोश पास कर सकते हैं, आपको बस अपने sql डेटाबेस में उपयुक्त उपयोगकर्ता परिभाषित डेटा प्रकार बनाना है।

नोट:कोड सीधे यहां लिखा गया है, कुछ गलतियां हो सकती हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. चेतावनी प्राप्त करना:कुल या अन्य सेट ऑपरेशन द्वारा शून्य मान समाप्त हो गया है

  2. गंभीर त्रुटि:C:\xampp\htdocs में अपरिभाषित फ़ंक्शन sqlsrv_connect () पर कॉल करें

  3. इन MySQL डेटाबेस मॉनिटरिंग बेस्ट प्रैक्टिस को आज़माएं

  4. SQL सर्वर एजेंट शेड्यूल संशोधित करें (T-SQL)

  5. SQUARE () SQL सर्वर में उदाहरण