SQL 服务器 IDENTITY_INSERT 已打开,但 INSERT 查询抱怨它未打开
SQL Server IDENTITY_INSERT is on but an INSERT query complains it is not on
我正在使用 MigratorDotNet 为应用程序编写迁移,在 运行 几千次类似的插入之后,SQL 服务器抱怨:
[migrate] SET IDENTITY_INSERT TimeOfDay ON
[migrate] INSERT INTO TimeOfDay (id) VALUES ('312491')
[migrate] [Warning] Cannot insert explicit value for identity column in table 'TimeOfDay' when IDENTITY_INSERT is set to OFF.
[migrate] SET IDENTITY_INSERT TimeOfDay OFF
就在上面,有类似的插入成功:
[migrate] SET IDENTITY_INSERT TimeOfDay ON
[migrate] INSERT INTO TimeOfDay (id) VALUES ('312485')
[migrate] SET IDENTITY_INSERT TimeOfDay OFF
[migrate] SET IDENTITY_INSERT TimeOfDay ON
[migrate] INSERT INTO TimeOfDay (id) VALUES ('312486')
[migrate] SET IDENTITY_INSERT TimeOfDay OFF
[migrate] SET IDENTITY_INSERT StartAndEndTime ON
[migrate] INSERT INTO StartAndEndTime (id, Start, Finish) VALUES ('156190', '312485', '312486')
[migrate] SET IDENTITY_INSERT StartAndEndTime OFF
TimeOfDay 中的其他列 table 默认为 null,插入是故意将它们设置为 null。
使用 Migrator.Providers.TransformationProvider.ExecuteNonQuery
执行查询。
有人知道这里发生了什么吗?
似乎解决这个问题的方法是在对 ExecuteNonQuery
的同一调用中使用 INSERT
操作调用 SET IDENTITY_INSERT
命令。以前,它们是在对 ExecuteNonQuery
的单独调用中完成的,正如 Aaron Bertrand 所说,这可能会失败,因为连接可能会在调用之间重置。
我正在使用 MigratorDotNet 为应用程序编写迁移,在 运行 几千次类似的插入之后,SQL 服务器抱怨:
[migrate] SET IDENTITY_INSERT TimeOfDay ON
[migrate] INSERT INTO TimeOfDay (id) VALUES ('312491')
[migrate] [Warning] Cannot insert explicit value for identity column in table 'TimeOfDay' when IDENTITY_INSERT is set to OFF.
[migrate] SET IDENTITY_INSERT TimeOfDay OFF
就在上面,有类似的插入成功:
[migrate] SET IDENTITY_INSERT TimeOfDay ON
[migrate] INSERT INTO TimeOfDay (id) VALUES ('312485')
[migrate] SET IDENTITY_INSERT TimeOfDay OFF
[migrate] SET IDENTITY_INSERT TimeOfDay ON
[migrate] INSERT INTO TimeOfDay (id) VALUES ('312486')
[migrate] SET IDENTITY_INSERT TimeOfDay OFF
[migrate] SET IDENTITY_INSERT StartAndEndTime ON
[migrate] INSERT INTO StartAndEndTime (id, Start, Finish) VALUES ('156190', '312485', '312486')
[migrate] SET IDENTITY_INSERT StartAndEndTime OFF
TimeOfDay 中的其他列 table 默认为 null,插入是故意将它们设置为 null。
使用 Migrator.Providers.TransformationProvider.ExecuteNonQuery
执行查询。
有人知道这里发生了什么吗?
似乎解决这个问题的方法是在对 ExecuteNonQuery
的同一调用中使用 INSERT
操作调用 SET IDENTITY_INSERT
命令。以前,它们是在对 ExecuteNonQuery
的单独调用中完成的,正如 Aaron Bertrand 所说,这可能会失败,因为连接可能会在调用之间重置。