c# - 从两个逗号分隔的参数作为输入更新表

标签 c# sql sql-server csv sql-server-2008-r2

我在前端有一个 Gridview,其中 Grid 有两列:ID 和 Order,如下所示:

 ID        Order

 1           1
 2           2
 3           3
 4           4

现在用户可以像在前端 Gridview 中一样更新订单:

ID        Order

 1           2
 2           4
 3           1
 4           3

现在,如果用户单击“保存”按钮,ID 和订单数据将作为 @sID = (1,2,3,4) 和 @sOrder = (2,4,1,3) 发送到存储过程

现在,如果我想更新订单并保存,我想将其存储到数据库中。通过存储过程如何更新到表中,以便更新表,并在选择时给出如下结果:

ID        Order

 1           2
 2           4
 3           1
 4           3

最佳答案

没有内置函数来解析这些逗号分隔的字符串。但是,您可以使用 SQL Server 中的 XML 函数来执行此操作。类似于:

DECLARE @sID VARCHAR(100) = '1,2,3,4';
DECLARE @sOrder VARCHAR(10) = '2,4,1,3';

DECLARE @sIDASXml xml = CONVERT(xml,
                            '<root><s>' + 
                            REPLACE(@sID, ',', '</s><s>') + 
                            '</s></root>');

DECLARE @sOrderASXml xml = CONVERT(xml,
                        '<root><s>' + 
                        REPLACE(@sOrder, ',', '</s><s>') + 
                        '</s></root>');

;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

然后您可以将其放入存储过程或其他内容中。

请注意:您不需要手动完成所有这些操作,应该通过某种方式使该 gridview 通过数据绑定(bind)自动更新底层数据表。你应该寻找这样的东西,而不是所有这些痛苦。

关于c# - 从两个逗号分隔的参数作为输入更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14681422/

相关文章:

c# - 保护数据库行免于手动修改

sql - "+="在T-SQL中是什么意思

c# - 调试时,有没有办法判断一个对象是否是不同的实例?

c# - 当外键为空时,使用 Lambda 表达式在 List<T> 中排序

C# 为什么不能进行委托(delegate)覆盖?

sql - 甲骨文 SQL : Show n rows for each id

sql - 如何在bigquery中合并相同的表?

c# - 在 Mongo C# 中,分组时,如何创建包含全部内容的组列表?

mysql - 另一个表中的最新相关条目

sql - 如果不是 CPU、磁盘或网络,查询执行过程中的瓶颈是什么?