2017-02-28 1 views
0

저는 작은 웹 응용 프로그램을 만들고 데이터 저장소로 Microsoft SQL을 사용하고 있습니다. JDBC를 사용하는 서비스 계층을 사용하여 데이터베이스와 인터페이스하고 있습니다. , 적절한 편안하고 API를 지원하기 위해Microsoft SQL에서 RESTful UPSERTS 지원

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

: 나는 데이터베이스에 ID가 존재하지 않는 "고객"에 대한 PUT을 할 때

현재, 나는 오류가 계속 이 ID가 없거나 기존 고객을 업데이트 할 수 있으면이 ID를 삽입 할 수 있기를 원합니다. 나는 광산과 관련하여 무수한 이슈를 찾았으며 많은 사람들이 신중하게 IDENTITY_INSERT를 사용하도록 권장하고 있지만 나쁜 습관이라고 말합니다. RESTful PUT을 건강하게 지원하기 위해 데이터베이스 또는 코드를 수행 할 수 있는지 궁금합니다. IDENTITY 열을 유지하면서이를 수행하는 방법이 있으면 CustomerID 열에 대한 지식없이 POST 작업을 수행 할 수있는 방법이 있는지 궁금합니다.

답변

2

SQL Server 2012 이상을 사용하는 경우 시퀀스를 사용할 수 있습니다. 이렇게하면 ID 삽입이 필요 없습니다. https://msdn.microsoft.com/en-us/library/ff878058.aspx

어떤 기술을 사용하든 SQL Server는 수동으로 제공 한 키를 알지 못하므로 생성 된 키와 겹치는 키를 제공하지 않도록 키 범위를 분할해야합니다.

ID 열을 사용하여이 작업을 수행하려면 고유 한 열 (1000000,1)을 정의하여 수동으로 삽입 할 수있는 백만 개 이하의 키를 사용할 수 있습니다. 식별 열을 사용하는 경우 identity_insert를 수동으로 값을 제공해야하므로 시퀀스가 ​​더 좋습니다.