我在前端有一个 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;
然后您可以将其放入存储过程或其他内容中。
请注意:您不需要手动完成所有这些操作,应该通过某种方式使该 gridview 通过数据绑定(bind)自动更新底层数据表。你应该寻找这样的东西,而不是所有这些痛苦。
关于c# - 从两个逗号分隔的参数作为输入更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14681422/