c#和sqlserver如果存在,如何从第二个表获取数据

时间:2017-06-30 15:50:45

标签: c# sql sql-server

经过一些建议,如果有一种更简单,更有效的方式,我将要做的事情......

我在sqlserver中有一个包含产品数据的表,然后在asp.net c#中有一个前端,这已导出到excel,txt文件选项并发布到API。

现在我需要建立起来,我们为某些客户提供不同格式的产品说明等某些字段,

所以产品表就像

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

但是对于'客户1',产品描述需要是'Ice Cool Lollypop'

我打算在我的应用程序中为'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 ect,

现在对于轻微的曲线球,可能有大约20多个字段需要被客户数据覆盖,也沿着这条路线我将指示可以被覆盖的字段,所以想知道是否有一种在原始sql select中执行此操作的方法。

1 个答案:

答案 0 :(得分:0)

您可以创建存储过程,忘记必须执行任何C#来获取客户的自定义产品。

此左侧加入ProductProducts表上的Product Id和Customer Id。如果它为NULL,则它没有找到客户产品描述,因此它将使用Products表中的默认描述。如果它不是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'