【问题标题】:update multiple rows with different values on single button click在单击一次按钮时更新具有不同值的多行
【发布时间】:2020-06-23 17:57:10
【问题描述】:

我有一个网格视图,它显示了我们的注册经销商每月购买的物品。在按钮单击事件中,网格视图中显示的所有项目均应由经销商一键购买。这是批量更新的情况。

网格视图代码::

<asp:GridView ID="GridCustomer" runat="server" AutoGenerateColumns="false" DataKeyNames="ID">
<Columns> 
    <asp:BoundField DataField="PURCHASED_MONTH" HeaderText="MONTH" ></asp:BoundField> 
    <asp:BoundField DataField="ITEM_NAME" HeaderText="ITEM NAME"></asp:BoundField>
    <asp:BoundField DataField="PAYABLE_AMOUNT" HeaderText="PAYABLE AMOUNT"></asp:BoundField>     
</Columns>
</asp:GridView> 

行数是动态的,有时单行有时多行。

表格数据::

ID      MONTH   ITEM_ID STATUS      PAYABLE_AMOUNT  
1       4       155     1           
2       5       159     1           
3       6       256     1

UPDATE 语句中,WHERE CLAUSE 将是ID。根据情况,我将拥有单个 ID 或多个 ID。例如,

update tbl_wholesome_purchase set STATUS = 2 WHERE ID = 1 but in some case ID = 1, 2, 3... also.

如何创建 WHERE CLAUSE 参数为动态的更新案例存储过程

【问题讨论】:

    标签: asp.net sql-server stored-procedures sql-update


    【解决方案1】:

    您使用的是 SQL Server 2016 或更高版本吗?

    在这种情况下,您可以使用 string_split 函数获得一个非常简单的解决方案,将 ID 作为单个逗号分隔的字符串传递。

    DECLARE @ids varchar(max) = '4,7,9,25'
    
    UPDATE tbl_wholesome_purchase SET status = 2 
    WHERE id IN (SELECT value FROM split_string(@ids, ','))
    

    另一种解决方案是在table valued parameters 上将ID 作为列表传递。您将需要遵循 ASP.NET 关于how to call them on dot net 的文档。

    CREATE TYPE ListIDs AS TABLE ( id int );
    GO
    
    CREATE PROCEDURE dbo. update_wholesome_purchase 
       @ids ListIDs READONLY
    AS
    BEGIN
       UPDATE tbl_wholesome_purchase SET status = 2 
       WHERE id IN (SELECT id FROM @ids);
    END
    GO
    

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 1970-01-01
      • 2023-04-10
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      相关资源
      最近更新 更多