यदि आप वास्तव में इस विषय तक पहुंचने के लिए यही तरीका चाहते हैं, तो तालिका-मूल्यवान पैरामीटर जाने का रास्ता है।
- सबसे पहले, एक संग्रहीत कार्यविधि पर स्विच करें क्योंकि आप SQL 2008 ornewer का उपयोग कर रहे हैं।
- दूसरा,
using
के बारे में पढ़ें yoursql आइटम्स के निपटान के लिए स्टेटमेंट।
छद्म डेटा स्तर:
public List<SalesList> ExecuteSales(List<string> items, int storeID, int W1, int W2, int vendorID, int retailerID)
{
var sales = new List<SalesList>();
var table = new DataTable();
table.Columns.Add("ItemNumber");
foreach (var item in items)
{
table.Rows.Add(item);
}
using (var connection = new SqlConnection("ConnectionString"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "cp_ExecuteSales";
command.Parameters.AddWithValue("@RetailerID", retailerID);
command.Parameters.AddWithValue("@VendorID", vendorID);
command.Parameters.AddWithValue("@StoreID", storeID);
var tvp = new SqlParameter("@ItemIds", SqlDbType.Structured)
{
TypeName = "tvpItems",
Value = table
};
command.Parameters.Add(tvp);
using (var reader = command.ExecuteReader())
{
//DoWork
}
}
}
return sales;
}
टीवीपी बनाएं:
CREATE TYPE [dbo].[tvpItems] AS TABLE(
[ItemNumber] [int] NULL
)
संग्रहित खरीद बनाएं:
CREATE PROCEDURE cp_ExecuteSales
@RetailerID VARCHAR(50),
@VendorID VARCHAR(50),
@StoreID VARCHAR(50),
@ItemIds tvpItems READONLY
AS
SELECT I.ITEM_NBR
,I.ITEM_DESC1
,I.ITEM_DESC2
,I.VENDOR_STK_NBR
,SUM(SA.POS_QTY) AS POS_QTY
,SUM(SA.POS_SALES) AS POS_SALES
FROM SALES_FTBL SA
INNER JOIN ITEM_TBL I ON SA.RETAILER_ID = I.RETAILER_ID
AND SA.ITEM_NBR = I.ITEM_NBR
INNER JOIN @ItemIds ID ON SA.ITEM_NBR = ID.ItemNumber
WHERE SA.RETAILER_ID=I.RETAILER_ID
AND SA.RETAILER_ID = @RetailerID
AND SA.VENDOR_NBR = @VendorID
AND SA.STORE_NBR = @StoreID
AND SA.ITEM_NBR=I.ITEM_NBR
यदि आपको संख्या मापदंडों का दूसरा सेट जोड़ने की आवश्यकता है, तो आप डेटाबेस में विभिन्न प्रकार के कई मापदंडों को पास कर सकते हैं। अतीत में, हमने बहुत सारे टेबल प्रकारों को प्रबंधित करने के बजाय डेटा प्रकारों की अलग-अलग सूची का समर्थन करने के लिए कई सामान्य प्रकार बनाए हैं।
CREATE TYPE [dbo].[IntList] AS TABLE(
[Value] [Int] NULL
)
याद रखने योग्य महत्वपूर्ण बातें:
- टीवीपी के लिए पैरामीटर प्रकार
SqlDbType.Structured
होना चाहिए - द
TypeName
पैरामीटर के लिए तालिका मान Parametertype नाम से मेल खाना चाहिए। - संग्रहीत प्रक्रिया में तालिका मान पैरामीटर पैरामीटर को
READONLY
के रूप में घोषित किया जाना चाहिए