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

परिदृश्य में डेटाबेस से रिकॉर्ड प्राप्त करने का सबसे अच्छा तरीका क्या है कि आपको सूचियां पास करनी होंगी कि उनमें से प्रत्येक में 2000 से अधिक पैरामीटर हैं?

यदि आप वास्तव में इस विषय तक पहुंचने के लिए यही तरीका चाहते हैं, तो तालिका-मूल्यवान पैरामीटर जाने का रास्ता है।

  • सबसे पहले, एक संग्रहीत कार्यविधि पर स्विच करें क्योंकि आप 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 के रूप में घोषित किया जाना चाहिए



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टेक्स्ट के साथ sql स्क्रिप्ट का उपयोग करके टेक्स्ट फ़ाइल कैसे बनाएं |

  2. SQL सर्वर में संग्रहीत कार्यविधि या फ़ंक्शन में अंतिम परिवर्तन की तिथि कैसे जांचें?

  3. SQL सर्वर 2005 एक चयन क्वेरी के परिणाम के लिए एक चर सेट करना

  4. मैं JDBC ड्राइवर के साथ एकीकृत सुरक्षा का उपयोग करके SQL सर्वर से कैसे जुड़ सकता हूँ?

  5. SQLSERVER में लिस्टएजीजी