簡體   English   中英

c#和sqlserver如何從第二個表中獲取數據(如果存在)

[英]c# and sqlserver how to get data from second table if exists

經過一番建議后,如果我有一種更簡單,更有效的方法...

我在sqlserver中有一個包含產品數據的表,然后在asp.net c#中有一個前端,此表已導出到excel,txt文件選項並發布到API。

現在,我需要說明的是,我們為某些客戶保留了某些字段,例如產品說明,格式不同。

所以產品表就像

PT_PRODUCT|PT_DESC              |PT_SIZE
ABC123    |Super Cool Ice-Cream |small

但是對於“客戶1”,產品說明必須為“冰爽棒棒糖”

我打算在應用程序中為“ Product”創建一個類,並用主表中的值填充它,

然后查詢第二個看起來像這樣的表,

CUST |PRODUCT  | FIELD_ID | FIELD_VAL
CU1  |ABC123   |PT_DESC   |Ice Cool Lollypop

並會運行類似

select * from table2 where cust='CA1' and product='ABC123'

for(int i=0;i< ds.tables[0].rows.count;i++)
{
   switch(ds.Tables[0].Rows[i]["FIELD_ID"])
   {
    case "PT_DESC":
    ClassProd.DESC = ds.Tables[0].Rows[i]["FIELD_VAL");
    //and so on updating the class
   }
}

使用更新的類通過API更新客戶網站或導出為ex​​cel,

現在對於輕微的曲線球,可能有大約20個以上的字段需要由客戶數據覆蓋,沿着這條路線,我將決定可以覆蓋的字段,因此想知道是否有一種方法可以在原始sql select中執行此操作。

您可以創建一個存儲過程,而不必做任何C#來獲得客戶的定制產品。

該左側將產品ID和客戶ID上的CustomerProducts表聯接在一起。 如果為NULL,則找不到客戶產品描述,因此它將使用“產品”表中的默認描述。 如果不是NOT NULL,那么它將在CustomerProducts中找到客戶產品描述,並改用該描述。

我不完全了解您的架構,但這是要點:

CREATE PROCEDURE GetCustomerProducts
(
    @CustomerId VARCHAR(255),
    @ProductId VARCHAR(255)
)
AS
BEGIN
SELECT PRODUCT
    ,FIELD_ID
    ,CASE 
        WHEN cp.FIELD_VAL IS NOT NULL
            THEN cp.FIELD_VAL
        ELSE p.FIELD_VAL
        END AS FIELD_VAL
FROM Products p
LEFT JOIN CustProducts cp ON cp.PT_PRODUCT = p.PT_PRODUCT
    AND cp.CUST = @CustomerID
WHERE p.PT_PRODUCT = @ProductId
END

然后:

EXEC GetCustomerProducts @CustomerId = 'CU1', @ProductId = 'ABC123'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM