Как обновить несколько строк одним запросом MS SQL?
Есть таблица с двумя строчками:
Я могу обновить данные в одной строке следующим образом:
string sqlExpression = String.Format(
"UPDATE Markers SET Lat = '{0}', Lng = '{1}' WHERE id = {2}", strMarkerGLat, strMarkerGLng, id);
Подскажите, как обновить несколько строк одним запросом MS SQL?
Ответы (1 шт):
Автор решения: koshe
→ Ссылка
Можно создать xml с данными и передать как параметр, например:
var tbl = new DataTable("tbl");
tbl.Columns.Add("id", typeof(int));
tbl.Columns.Add("Lat", typeof(float));
tbl.Columns.Add("Lng", typeof(float));
tbl.Rows.Add(1, 55.75393, 37.620795);
tbl.Rows.Add(2, 55.76391, 37.640763);
tbl.Rows.Add(5, 55.76293, 37.611632);
var ds = new DataSet("ds");
ds.Tables.Add(tbl);
var data = ds.GetXml();
using (var conn = new System.Data.SqlClient.SqlConnection(connectionString))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText =
@"WITH ct AS
(
SELECT T.c.value('id[1]','int') as id,
T.c.value('Lat[1]','float') as Lat,
T.c.value('Lng[1]','float') as Lng
FROM @x.nodes('/*/*') T(c)
)
UPDATE m
SET Lat=ct.Lat, Lng=ct.Lng
FROM Markers m INNER JOIN
ct ON ct.id=m.id"
cmd.Parameters.Add("@x", SqlDbType.Xml).Value = data;
var rdr = cmd.ExecuteNonQuery();
}
}
