Unverified Commit 5c87dc97 authored by Wei's avatar Wei Committed by GitHub

SqlBuilder Support Update Set (#1404)

I add update `Set` method and unit test.

e.g: 
```C#
var sb = new SqlBuilder()
       .Set("vip = @vip", new { vip })
       .Set("updatetime = @updatetime", new { updatetime })
       .Where("id = @id", new { id })
;
var template = sb.AddTemplate("update #Users /**set**/ /**where**/");
connection.Execute(template.RawSql, template.Parameters);
```

RawSql will generate : 
```
update #Users Set vip = @vip , updatetime = @updatetime\n WHERE id = @id\n
```

using Dapper Execute in sqlserver it'll reqeust by below sql command
```
exec sp_executesql N'update #Users Set vip = @vip , updatetime = @updatetime
 WHERE id = @id
',N'@vip bit,@updatetime datetime,@id int',@vip=1,@updatetime='2020-01-01 00:00:00',@id=1
```
Co-authored-by: 's avatarNick Craver <nrcraver@gmail.com>
Co-authored-by: 's avatarNick Craver <craver@stackoverflow.com>
parent 2c81a408
......@@ -149,5 +149,9 @@ protected SqlBuilder AddClause(string name, string sql, object parameters, strin
public SqlBuilder Having(string sql, dynamic parameters = null) =>
AddClause("having", sql, parameters, "\nAND ", "HAVING ", "\n", false);
public SqlBuilder Set(string sql, dynamic parameters = null) =>
AddClause("set", sql, parameters, " , ", "SET ", "\n", false);
}
}
using System.Linq;
using System;
using System.Linq;
using Xunit;
namespace Dapper.Tests
......@@ -42,5 +43,42 @@ public void TestSqlBuilderWithDapperQuery()
connection.Execute("drop table #Users");
}
}
[Fact]
public void TestSqlBuilderUpdateSet()
{
var id = 1;
var vip = true;
var updatetime = DateTime.Parse("2020/01/01");
var sb = new SqlBuilder()
.Set("vip = @vip", new { vip })
.Set("updatetime = @updatetime", new { updatetime })
.Where("id = @id", new { id })
;
var template = sb.AddTemplate("update #Users /**set**/ /**where**/");
const string createSql = @"
create table #Users (Id int,Name varchar(20),Age int,Country nvarchar(5),Vip bit,Updatetime datetime);
insert #Users (Id,Name,Age,Country) values(1,'Sam',16,'USA'),(2,'Tom',25,'UK'),(3,'Henry',14,'UK')";
try
{
connection.Execute(createSql);
var effectCount = connection.Execute(template.RawSql, template.Parameters);
var result = connection.QueryFirst("select * from #Users where Id = 1");
Assert.Equal("update #Users SET vip = @vip , updatetime = @updatetime\n WHERE id = @id\n", template.RawSql);
Assert.True((bool)result.Vip);
Assert.Equal(updatetime, (DateTime)result.Updatetime);
}
finally
{
connection.Execute("drop table #Users");
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment