[英]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更新客戶網站或導出為excel,
現在對於輕微的曲線球,可能有大約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.