Sql server 在Microsoft SQL中支持RESTful升级

Sql server 在Microsoft SQL中支持RESTful升级,sql-server,rest,jdbc,upsert,identity-insert,Sql Server,Rest,Jdbc,Upsert,Identity Insert,我正在开发一个小型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的情况下插入该ID,或者更新

我正在开发一个小型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的情况下插入该ID,或者更新已经存在的客户。我查阅了很多与我有关的问题,其中很多都谨慎地建议打开IDENTITY_INSERT,但我认为这是一种不好的做法。我很好奇我能在数据库或代码中做些什么来健康地支持RESTful PUTs——如果有办法在维护标识列的同时做到这一点,那么我就可以在不知道CustomerID列的情况下进行POST操作。

如果您使用的是SQL Server 2012或更高版本,您可以使用序列。这将避免需要插入标识

无论使用哪种技术,都需要对密钥范围进行分区,以便不提供与生成的密钥重叠的密钥,因为SQL Server不知道您手动提供了哪些密钥


要对标识列执行此操作,可以将该列定义为标识(1000000,1),以便较低的百万键可用于手动插入。如果使用标识列,则必须使用identity\u insert手动提供值,因此最好使用序列。

如果使用SQL Server 2012或更高版本,则可以使用序列。这将避免需要插入标识

无论使用哪种技术,都需要对密钥范围进行分区,以便不提供与生成的密钥重叠的密钥,因为SQL Server不知道您手动提供了哪些密钥

要对标识列执行此操作,可以将该列定义为标识(1000000,1),以便较低的百万键可用于手动插入。如果使用标识列,则必须使用identity\u insert手动提供值,因此最好使用序列