每使用行fluentmigrator一个新的值更新行数据(Update row data with

2019-09-22 03:21发布

我使用fluentmigrator一个新列添加到表中。 然后我想与该列的唯一值来更新表中的每一行。

目前,当我使用:

Update.Table("Foo").InSchema("dbo").Set(new { Bar = Bar.Generate() }).AllRows();

它给所有行相同的值。

我如何确保它要求每一行的方法?

Answer 1:

我不知道Bar.Generate做什么,但我猜测它会创建一个GUID或唯一的ID。

如果是这样,那么你可以使用:

Execute.Sql("update dbo.Foo set Bar = NEWID()");

或者,如果你想连续的GUID,那么你可以使用NEWSEQUENTIALID() 。

如果要为这种独特的identier添加一个新列,那么所有你需要做的就是指定新的列.AsGuid()

编辑:FluentMigrator是一个小流利DSL,并不意味着覆盖这样的复杂情况。 有没有办法(据我所知)一个SQL UPDATE,因此没有简单的方法与FluentMigrator做到这一点做到这一点。 你必须获得与ADO.NET或ORM(小巧玲珑/ NHibernate的),然后遍历每行表中的行数和更新与自定义唯一标识符栏列。 所以,如果你有一个百万行,那么你将不得不作出百万SQL更新。 如果你可以重写你的Bar.Generate()方法,即是基于NEWID()之类的函数SQL函数这个还是这个 ,那么你可以做到这一点作为一个UPDATE语句,并与FluentMigrator的Execute.Sql方法调用它。

你没有提到你正在使用的数据库。 但一些喜欢的Postgres有非标准的特性 ,可以帮助你。



文章来源: Update row data with a new value per row using fluentmigrator