diff --git a/Dapper.SqlBuilder/SqlBuilder.cs b/Dapper.SqlBuilder/SqlBuilder.cs index c83097f4..ad7b1602 100644 --- a/Dapper.SqlBuilder/SqlBuilder.cs +++ b/Dapper.SqlBuilder/SqlBuilder.cs @@ -149,5 +149,9 @@ namespace Dapper 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); + } } diff --git a/Dapper.Tests/SqlBuilderTests.cs b/Dapper.Tests/SqlBuilderTests.cs index ab448242..83587ecd 100644 --- a/Dapper.Tests/SqlBuilderTests.cs +++ b/Dapper.Tests/SqlBuilderTests.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using Xunit; namespace Dapper.Tests @@ -42,5 +43,42 @@ namespace Dapper.Tests 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"); + } + } } }