Update a table from two comma separated parameter as input

后端 未结 3 415
情深已故
情深已故 2021-01-23 00:43

I have a Gridview in front end where Grid have two columns : ID and Order like this:

 ID        Order

 1           1
 2           2
 3           3
 4                    


        
3条回答
  •  一个人的身影
    2021-01-23 01:35

    There is no built in function to parse these comma separated string. However, yo can use the XML function in SQL Server to do this. Something like:

    DECLARE @sID VARCHAR(100) = '1,2,3,4';
    DECLARE @sOrder VARCHAR(10) = '2,4,1,3';
    
    DECLARE @sIDASXml xml = CONVERT(xml,
                                '' + 
                                REPLACE(@sID, ',', '') + 
                                '');
    
    DECLARE @sOrderASXml xml = CONVERT(xml,
                            '' + 
                            REPLACE(@sOrder, ',', '') + 
                            '');
    
    ;WITH ParsedIDs
    AS
    (
        SELECT ID = T.c.value('.','varchar(20)'),
        ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RowNumber
        FROM @sIDASXml.nodes('/root/s') T(c)
    ), ParsedOrders
    AS
    (
        SELECT "Order" = T.c.value('.','varchar(20)'),
            ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RowNumber
        FROM @sOrderASXml.nodes('/root/s') T(c)
    )
    UPDATE t
    SET t."Order" = p."Order"
    FROM @tableName AS t
    INNER JOIN
    (
       SELECT i.ID, p."Order"
       FROM ParsedOrders p 
       INNER JOIN ParsedIDs i ON p.RowNumber = i.RowNumber
    ) AS p ON t.ID = p.ID;
    

    Live Demo

    Then you can put this inside a stored procedure or whatever.

    Note that: You didn't need to do all of this manually, it should be some way to make this gridview update the underlying data table automatically through data binding. You should search for something like this instead of all this pain.

提交回复
热议问题