SQL Server使用XML在单个查询中执行批量更新

时间:2012-05-18 19:27:01

标签: c# xml sql-server-2005

我一直在使用下面的示例代码段来更新SQL Server 2005数据库表。它将List<T>转换为T,其中conn.Open(); cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = @"INSERT table (A,B,C,D,E,F) SELECT Tbl.Col.value('@A','nvarchar(50)'), Tbl.Col.value('@B','int'), Tbl.Col.value('@C','nvarchar(50)'), Tbl.Col.value('@D','nvarchar(1000)'), Tbl.Col.value('@E','nvarchar(50)'), Tbl.Col.value('@F','nvarchar(50)') FROM @xml.nodes('//row') Tbl(Col)"; cmd.Parameters.Add("@xml", SqlDbType.Xml).Value = new XDocument( new XDeclaration("1.0", "utf-8", "yes"), new XElement("rows", toInsert.Select(p => new XElement("row", new XAttribute("A", x.Prop1), new XAttribute("B", x.Prop2), new XAttribute("C", x.Prop3), new XAttribute("D", x.Prop4), new XAttribute("E", x.Prop5), new XAttribute("F", x.Prop6))))).ToString(); Console.WriteLine(cmd.ExecuteNonQuery().ToString() + " row(s) affected."); conn.Close(); 是具有一系列属性(字段)的自定义对象,嵌套在行根元素内的行元素上的XML属性中。

通过这种方式,我在一个SQL事务中进行了大量的插入操作。遵循这条相似的路线,我想提供一系列更新而不是插入。我无法找到任何关于如何适应这种方法的好资料。例如假设基于主键A更新B到F。

{{1}}

1 个答案:

答案 0 :(得分:0)

如果您想坚持使用此方法,可以使用以下sql修改插入并执行更新:

update  yourTable 
        set b = Tbl.Col.value('@B','int')
        --other cols...
from     yourTable y
join    @xml.nodes('//row') Tbl(Col) on
        y.a = Tbl.Col.value('@A','nvarchar(50)')