0

我正在开发一个小型 Web 应用程序并使用 Microsoft SQL 进行数据存储。我正在使用利用 JDBC 的服务层与数据库交互。

目前,当我尝试将 ID 不存在的“客户”放入数据库中时,我不断收到错误消息:

Cannot insert explicit value for identity column in table 'Customers' when IDENTITY_INSERT is set to OFF.

为了支持正确的 RESTful API,如果此 ID 不存在,我希望能够插入它或更新已经存在的客户。我查找了无数与我的有点相关的问题,其中很多人谨慎地建议打开 IDENTITY_INSERT,但说这是一种不好的做法。我很好奇我可以在数据库或代码中做什么来健康地支持 RESTful PUT - 如果有办法在维护 IDENTITY 列的同时做到这一点,那么我可以在不了解 CustomerID 列的情况下进行 POST 操作。

4

1 回答 1

2

如果您使用的是 SQL Server 2012 或更高版本,则可以使用序列。这将避免身份插入的需要。 https://msdn.microsoft.com/en-us/library/ff878058.aspx

无论您使用哪种技术,您都需要对键范围进行分区,这样您就不会提供与生成的键重叠的键,因为 SQL Server 不知道您手动提供了哪些键。

要对标识列执行此操作,您可以将该列定义为标识(1000000,1),以便可以手动插入较低的百万个键。如果您使用标识列,则必须使用 identity_insert 手动提供值,因此序列更可取。

于 2017-02-28T23:05:56.430 回答